InCallService 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
此服務是由想要提供功能來管理通話的應用程式所實作。
[Android.Runtime.Register("android/telecom/InCallService", ApiSince=23, DoNotGenerateAcw=true)]
public abstract class InCallService : Android.App.Service
[<Android.Runtime.Register("android/telecom/InCallService", ApiSince=23, DoNotGenerateAcw=true)>]
type InCallService = class
inherit Service
- 繼承
- 屬性
備註
此服務是由想要提供功能來管理通話的應用程式所實作。 <h2>成為默認電話應用程式</h2> 默認撥號程式/電話應用程式是一種,可在裝置處於通話時提供通話內使用者介面。 它也為使用者提供了起始通話的方法,並查看其裝置上通話的歷程記錄。 裝置會與系統提供的默認撥號/電話應用程式搭配使用。 用戶可以選擇單一應用程式,從系統應用程式接管此角色。 想要履行此角色的應用程式會使用 android.app.role.RoleManager
來要求他們填滿 android.app.role.RoleManager#ROLE_DIALER
角色。
默認手機應用程式會在裝置處於通話時提供使用者介面,且裝置不在汽車模式中(亦即 UiModeManager#getCurrentModeType()
不是 android.content.res.Configuration#UI_MODE_TYPE_CAR
)。
為了填滿 android.app.role.RoleManager#ROLE_DIALER
角色,應用程式必須符合一些需求: <ul><li>它必須處理 Intent#ACTION_DIAL
意圖。 這表示應用程式必須提供撥號鍵 UI,使用者才能起始撥出電話。</li li>><必須完整實作 InCallService
API,並提供傳入呼叫 UI,以及進行中的呼叫 UI。</li></ul>
注意:如果填入 android.app.role.RoleManager#ROLE_DIALER
的應用程式在系結期間傳 null
InCallService
回 ,電信架構會自動回復為使用預先載入於裝置上的撥號程式應用程式。 系統會向用戶顯示通知,讓他們知道其通話已繼續使用預先載入的撥號程式應用程式。 您的應用程式不應該傳回系 null
結;這樣做表示它不符合 的需求 android.app.role.RoleManager#ROLE_DIALER
。
注意:如果您的應用程式在 android.app.role.RoleManager#ROLE_DIALER
運行時間填滿並進行變更,導致它不再符合此角色的需求, android.app.role.RoleManager
則會自動從角色中移除您的應用程式,並關閉您的應用程式。 例如,如果您使用 android.content.pm.PackageManager#setComponentEnabledSetting(ComponentName, int, int)
以程式設計方式停用 InCallService
應用程式在其指令清單中宣告,則您的應用程式將不再滿足 預期 android.app.role.RoleManager#ROLE_DIALER
的需求。
當使用者撥打緊急電話時,即使您的應用程式填滿 android.app.role.RoleManager#ROLE_DIALER
角色,預先載入的撥號程式仍會一律使用。 為了確保在撥打緊急電話時獲得最佳體驗,默認撥號程式應該一律用來 android.telecom.TelecomManager#placeCall(Uri, Bundle)
撥打電話(包括緊急電話)。 這可確保平臺能夠驗證要求是否來自默認撥號程式。 如果非預先載入的撥號程式應用程式用來 Intent#ACTION_CALL
撥打緊急電話,則會使用 Intent#ACTION_DIAL
進行確認,將它引發到預先載入的撥號程式應用程式;這是次佳的用戶體驗。
以下是 的 InCallService
範例指令清單註冊。 元數據 TelecomManager#METADATA_IN_CALL_SERVICE_UI
表示此特定 InCallService
實作打算取代內建的內建 UI。 元數據 TelecomManager#METADATA_IN_CALL_SERVICE_RINGING
表示這會 InCallService
播放來電的鈴聲。 如需在應用程式中顯示來電 UI 和播放鈴聲的詳細資訊,請參閱下方。
{@code
<service android:name="your.package.YourInCallServiceImplementation"
android:permission="android.permission.BIND_INCALL_SERVICE"
android:exported="true">
<meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
<meta-data android:name="android.telecom.IN_CALL_SERVICE_RINGING"
android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService"/>
</intent-filter>
</service>
}
<em>注意:您應該不要將標示 InCallService
為 屬性 android:exported="false"
;這麼做可能會導致呼叫期間無法繫結至您的實作。</em>
除了實作 InCallService
API 之外,您也必須在指令清單中宣告處理意圖的活動 Intent#ACTION_DIAL
。 下列範例說明如何完成此作業:
{@code
<activity android:name="your.package.YourDialerActivity"
android:label="@string/yourDialerActivityLabel">
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
</activity>
}
當使用者安裝您的應用程式並第一次執行應用程式時,您應該使用 android.app.role.RoleManager
來提示使用者查看他們是否希望您的應用程式成為新的默認手機應用程式。 <p id=“requestRole”> 下列程式代碼顯示您的應用程式如何要求成為預設電話/撥號程式應用程式:
{@code
private static final int REQUEST_ID = 1;
public void requestRole() {
RoleManager roleManager = (RoleManager) getSystemService(ROLE_SERVICE);
Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER);
startActivityForResult(intent, REQUEST_ID);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_ID) {
if (resultCode == android.app.Activity.RESULT_OK) {
// Your app is now the default dialer app
} else {
// Your app is not the default dialer app
}
}
}
}
<p id=“companionInCallService”><h3 Access to InCallService for可穿戴裝置</h3><>ol> 如果您的應用程式是第三方隨附應用程式,而且想要存取 InCallService API,您的應用程式可以做什麼:
<ol><li> 宣告指令清單 <中的 MANAGE_ONGOING_CALLS 許可權 li> 透過 API 將實體可穿戴裝置 android.companion.CompanionDeviceManager
關聯為隨附應用程式。 請參閱: https://developer.android.com/guide/topics/connectivity/companion-device-pairing<li> 使用 BIND_INCALL_SERVICE 許可權 </ol></ol 實作此 InCallService>
</pre><p id=“incomingCallNotification”<>h3 顯示傳入通話通知</h3>> 當您的應用程式透過 InCallService#onCallAdded(Call)
收到新的來電時,它負責顯示來電的來電 UI。 它應該使用 android.app.NotificationManager
API 來張貼新的來電通知。
您的應用程式在宣告元數據 TelecomManager#METADATA_IN_CALL_SERVICE_RINGING
的位置,負責播放來電的鈴聲。 您的應用程式應該建立 , android.app.NotificationChannel
指定所需的鈴聲。 例如:
<code>
NotificationChannel channel = new NotificationChannel(YOUR_CHANNEL_ID, "Incoming Calls",
NotificationManager.IMPORTANCE_MAX);
// other channel setup stuff goes here.
// We'll use the default system ringtone for our incoming call notification channel. You can
// use your own audio resource here.
Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
channel.setSound(ringtoneUri, new AudioAttributes.Builder()
// Setting the AudioAttributes is important as it identifies the purpose of your
// notification sound.
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
NotificationManager mgr = getSystemService(NotificationManager.class);
mgr.createNotificationChannel(channel);
</code>
當您的應用程式收到新的來電時,它會建立 android.app.Notification
連入通話的 ,並將它與您的來電通知通道產生關聯。 您可以在通知上指定 , android.app.PendingIntent
以啟動全螢幕來電 UI。 通知管理員架構會在用戶主動使用手機時,將您的通知顯示為頭通知。 當使用者未使用電話時,會改用全螢幕來電 UI。 例如:
<code>{@code
// Create an intent which triggers your fullscreen incoming call user interface.
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(context, YourIncomingCallActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent, PendingIntent.FLAG_MUTABLE_UNAUDITED);
// Build the notification as an ongoing high priority item; this ensures it will show as
// a heads up notification which slides down over top of the current content.
final Notification.Builder builder = new Notification.Builder(context);
builder.setOngoing(true);
builder.setPriority(Notification.PRIORITY_HIGH);
// Set notification content intent to take user to the fullscreen UI if user taps on the
// notification body.
builder.setContentIntent(pendingIntent);
// Set full screen intent to trigger display of the fullscreen UI when the notification
// manager deems it appropriate.
builder.setFullScreenIntent(pendingIntent, true);
// Setup notification content.
builder.setSmallIcon( yourIconResourceId );
builder.setContentTitle("Your notification title");
builder.setContentText("Your notification content.");
// Use builder.addAction(..) to add buttons to answer or reject the call.
NotificationManager notificationManager = mContext.getSystemService(
NotificationManager.class);
notificationManager.notify(YOUR_CHANNEL_ID, YOUR_TAG, YOUR_ID, builder.build());
}
的 android.telecom.InCallService
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
InCallService() |
此服務是由想要提供功能來管理通話的應用程式所實作。 |
InCallService(IntPtr, JniHandleOwnership) |
此服務是由想要提供功能來管理通話的應用程式所實作。 |
欄位
AccessibilityService |
使用 搭配 |
AccountService |
使用 搭配 |
ActivityService |
使用 來 |
AlarmService |
使用 搭配 |
AppOpsService |
使用搭配 |
AppSearchService |
使用 搭配 |
AppwidgetService |
使用 搭配 |
AudioService |
使用 搭配 |
BatteryService |
使用搭配 |
BindAllowActivityStarts |
已淘汰.
|
BindExternalServiceLong |
的運作方式與 |
BindNotPerceptible |
已淘汰.
旗標: |
BindSharedIsolatedProcess |
已淘汰.
旗標: |
BiometricService |
使用 來 |
BlobStoreService |
使用 搭配 |
BluetoothService |
使用 搭配 |
BugreportService |
擷取 Bugreport 的服務。 (繼承來源 Context) |
CameraService |
使用 來 |
CaptioningService |
使用 搭配 |
CarrierConfigService |
使用 搭配 |
ClipboardService |
使用搭配 |
CompanionDeviceService |
使用搭配 |
ConnectivityDiagnosticsService |
使用 搭配 |
ConnectivityService |
使用搭配 |
ConsumerIrService |
使用 搭配 |
CredentialService |
使用搭配 |
CrossProfileAppsService |
使用 搭配 |
DeviceIdDefault |
默認裝置識別碼,這是主要(非虛擬)裝置的標識碼。 (繼承來源 Context) |
DeviceIdInvalid |
無效的裝置識別碼。 (繼承來源 Context) |
DeviceLockService |
使用 搭配 |
DevicePolicyService |
使用 搭配 |
DisplayHashService |
使用搭配 |
DisplayService |
使用 來 |
DomainVerificationService |
使用搭配 |
DownloadService |
使用 搭配 |
DropboxService |
使用搭配 |
EuiccService |
使用搭配 |
FileIntegrityService |
使用 搭配 |
FingerprintService |
使用搭配 |
GameService |
使用 搭配 |
GrammaticalInflectionService |
使用 搭配 |
HardwarePropertiesService |
使用搭配 |
HealthconnectService |
使用 搭配 |
InputMethodService |
使用搭配 |
InputService |
使用 來 |
IpsecService |
使用 搭配 |
JobSchedulerService |
使用 搭配 |
KeyguardService |
使用 搭配 |
LauncherAppsService |
使用 搭配 |
LayoutInflaterService |
使用 搭配 |
LocaleService |
使用 搭配 |
LocationService |
使用 搭配 |
MediaCommunicationService |
使用搭配 |
MediaMetricsService |
使用 來 |
MediaProjectionService |
使用 搭配 |
MediaRouterService |
使用 搭配 |
MediaSessionService |
使用搭配 |
MidiService |
使用 搭配 |
NetworkStatsService |
使用搭配 |
NfcService |
使用 搭配 |
NotificationService |
使用 搭配 |
NsdService |
使用搭配 |
OverlayService |
使用 搭配 |
PeopleService |
使用 來 |
PerformanceHintService |
使用 搭配 |
PowerService |
使用 搭配 |
PrintService |
|
ReceiverExported |
已淘汰.
旗標 |
ReceiverNotExported |
已淘汰.
旗標: |
ReceiverVisibleToInstantApps |
已淘汰.
旗標: |
RestrictionsService |
使用 搭配 |
RoleService |
使用搭配 |
SearchService |
使用 搭配 |
SensorService |
使用 搭配 |
ServiceInterface |
|
ShortcutService |
使用搭配 |
StatusBarService |
使用 來 |
StopForegroundDetach |
已淘汰.
選取器 |
StopForegroundLegacy |
的 |
StopForegroundRemove |
已淘汰.
的 |
StorageService |
使用搭配 |
StorageStatsService |
使用搭配 |
SystemHealthService |
使用 搭配 |
TelecomService |
使用搭配 |
TelephonyImsService |
使用 搭配 |
TelephonyService |
使用 搭配 |
TelephonySubscriptionService |
使用 搭配 |
TextClassificationService |
使用 搭配 |
TextServicesManagerService |
使用搭配 |
TvInputService |
使用 來 |
TvInteractiveAppService |
使用 搭配 |
UiModeService |
使用 搭配 |
UsageStatsService |
使用搭配 |
UsbService |
使用 搭配 |
UserService |
使用 搭配 |
VibratorManagerService |
使用 搭配 |
VibratorService |
使用 搭配 |
VirtualDeviceService |
使用搭配 |
VpnManagementService |
使用搭配 |
WallpaperService |
使用 搭配 |
WifiAwareService |
使用 搭配 |
WifiP2pService |
使用 搭配 |
WifiRttRangingService |
使用 搭配 |
WifiService |
使用 搭配 |
WindowService |
使用 搭配 |
屬性
Application |
傳回擁有此服務的應用程式。 (繼承來源 Service) |
ApplicationContext |
傳回目前進程之單一全域 Application 對象的內容。 (繼承來源 ContextWrapper) |
ApplicationInfo |
傳回此內容套件的完整應用程式資訊。 (繼承來源 ContextWrapper) |
Assets |
傳回應用程式套件的 AssetManager 實例。 (繼承來源 ContextWrapper) |
AttributionSource |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Context) |
AttributionTag |
屬性可用於複雜的應用程式中,以邏輯方式分隔應用程式的部分。 (繼承來源 Context) |
BaseContext | (繼承來源 ContextWrapper) |
CacheDir |
傳回檔案系統上應用程式特定快取目錄的絕對路徑。 (繼承來源 ContextWrapper) |
CallAudioState |
取得目前的通話音訊狀態。 |
Calls |
取得這個呼叫中服務要顯示的目前 s 清單 |
Class |
傳回這個 |
ClassLoader |
傳回類別載入器,您可用來擷取此封裝中的類別。 (繼承來源 ContextWrapper) |
CodeCacheDir |
傳回檔案系統上應用程式特定快取目錄的絕對路徑,該目錄是專為儲存快取的程式代碼所設計。 (繼承來源 ContextWrapper) |
ContentResolver |
傳回應用程式套件的 ContentResolver 實例。 (繼承來源 ContextWrapper) |
CurrentCallEndpoint |
取得目前的 CallEndpoint。 |
DataDir |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 ContextWrapper) |
DeviceId |
取得此內容相關聯的裝置標識碼。 (繼承來源 Context) |
Display |
取得與此內容相關聯的顯示。 (繼承來源 Context) |
ExternalCacheDir |
傳回主要外部檔案系統上目錄的絕對路徑(也就是 ExternalStorageDirectory 應用程式可以放置其擁有之快取檔案的位置。 (繼承來源 ContextWrapper) |
FilesDir |
傳回檔系統上用來儲存檔案 OpenFileOutput(String, FileCreationMode) 的目錄絕對路徑。 (繼承來源 ContextWrapper) |
ForegroundServiceType |
如果服務已透過呼叫成為前景服務 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
IsDeviceProtectedStorage |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 ContextWrapper) |
IsRestricted |
指出此內容是否受到限制。 (繼承來源 Context) |
IsUiContext |
如果內容是可存取、 或 |
JniIdentityHashCode |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
JniPeerMembers |
此服務是由想要提供功能來管理通話的應用程式所實作。 |
MainExecutor |
|
MainLooper |
傳回目前進程之主線程的迴圈器。 (繼承來源 ContextWrapper) |
NoBackupFilesDir |
傳回檔案系統上目錄的絕對路徑,類似於 FilesDir。 (繼承來源 ContextWrapper) |
ObbDir |
傳回此應用程式 OBB 檔案(如果有的話)可找到的主要外部記憶體目錄。 (繼承來源 ContextWrapper) |
OpPackageName |
傳回應該用於 |
PackageCodePath |
傳回此內容主要 Android 套件的完整路徑。 (繼承來源 ContextWrapper) |
PackageManager |
傳回 PackageManager 實例以尋找全域套件資訊。 (繼承來源 ContextWrapper) |
PackageName |
傳回此應用程式套件的名稱。 (繼承來源 ContextWrapper) |
PackageResourcePath |
傳回此內容主要 Android 套件的完整路徑。 (繼承來源 ContextWrapper) |
Params |
如果透過 建立此內容,則傳回此內容所建立 |
PeerReference |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
Resources |
傳回應用程式套件的 Resources 實例。 (繼承來源 ContextWrapper) |
Theme |
傳回與此內容相關聯的 Theme 物件。 (繼承來源 ContextWrapper) |
ThresholdClass |
此服務是由想要提供功能來管理通話的應用程式所實作。 |
ThresholdType |
此服務是由想要提供功能來管理通話的應用程式所實作。 |
Wallpaper | (繼承來源 ContextWrapper) |
WallpaperDesiredMinimumHeight | (繼承來源 ContextWrapper) |
WallpaperDesiredMinimumWidth | (繼承來源 ContextWrapper) |
方法
明確介面實作
IJavaPeerable.Disposed() |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
IJavaPeerable.Finalized() |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
IJavaPeerable.JniManagedPeerState |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
此服務是由想要提供功能來管理通話的應用程式所實作。 (繼承來源 Object) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
此服務是由想要提供功能來管理通話的應用程式所實作。 |
GetJniTypeName(IJavaPeerable) |
此服務是由想要提供功能來管理通話的應用程式所實作。 |