Android 14(API レベル 34)以降では、フォアグラウンド サービスごとに適切なサービス タイプを宣言する必要があります。つまり、アプリ マニフェストでサービス タイプを宣言し、そのタイプに適したフォアグラウンド サービス権限をリクエストする必要があります(
FOREGROUND_SERVICE
権限のリクエストに加えて)。また、フォアグラウンド サービスのタイプによっては、サービスを起動する前にランタイム権限をリクエストしなければならない場合があります。
カメラ
- マニフェストの
android:foregroundServiceTypeで宣言するフォアグラウンド サービス タイプ camera- マニフェストで宣言する権限
FOREGROUND_SERVICE_CAMERAstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_CAMERA- ランタイムの前提条件
CAMERA実行時の権限をリクエストして付与されていること- 説明
マルチタスクが可能なビデオチャット アプリなど、引き続きバックグラウンドからカメラにアクセスします。
接続されたデバイス
- マニフェストで宣言するフォアグラウンド サービス タイプ
android:foregroundServiceTypeconnectedDevice- マニフェストで宣言する権限
FOREGROUND_SERVICE_CONNECTED_DEVICEstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- ランタイムの前提条件
次の条件の少なくとも 1 つを満たす必要があります。
マニフェストで次の権限のうち少なくとも 1 つを宣言します。
次の実行時の権限を少なくとも 1 つリクエストし、付与されていること。
UsbManager.requestPermission()を呼び出します。
- 説明
Bluetooth、NFC、IR、USB、またはネットワーク接続を必要とする外部デバイスとの通信。
- 代替
アプリが外部デバイスへの継続的なデータ転送を行う必要がある場合は、代わりにコンパニオン デバイス マネージャーを使用することを検討してください。companion device presence API を使用すると、コンパニオン デバイスが範囲内にある間はアプリを実行し続けることができます。
アプリで Bluetooth デバイスをスキャンする必要がある場合は、代わりに Bluetooth scan API を使用することを検討してください。
データの同期
- マニフェストで宣言するフォアグラウンド サービスのタイプ(
android:foregroundServiceTypedataSync- マニフェストで宣言する権限
FOREGROUND_SERVICE_DATA_SYNCstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_DATA_SYNC- ランタイムの前提条件
- なし
- 説明
次のようなデータ転送オペレーション:
- データのアップロードまたはダウンロード
- バックアップと復元オペレーション
- インポート / エクスポート オペレーション
- データの取得
- ローカル ファイルの処理
- ネットワーク経由でのデバイスとクラウド間のデータ転送
- 別の方法
詳しくは、データ同期フォアグラウンド サービスの代替方法 をご覧ください。
BOOT_COMPLETED健康
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypehealth- 在清单中声明的权限
FOREGROUND_SERVICE_HEALTH- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_HEALTH- 运行时前提条件
必须至少满足以下其中一个条件:
在清单中声明
HIGH_SAMPLING_RATE_SENSORS权限。至少请求并被授予以下其中一项运行时权限:
- 说明
为健身类别的应用(例如锻炼追踪器)提供支持的所有长时间运行的用例。
位置情報
- マニフェストで宣言するフォアグラウンド サービス タイプ
android:foregroundServiceTypelocation- マニフェストで宣言する権限
FOREGROUND_SERVICE_LOCATIONstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_LOCATION- ランタイムの前提条件
ユーザーが位置情報サービスを有効にしており、アプリに次のいずれかの実行時の権限が付与されている必要があります。
- 説明
ナビゲーションや現在地の共有など、位置情報へのアクセスが必要な長時間にわたるユースケース。
- 代替
ユーザーが特定の場所に到達したときにアプリをトリガーする必要がある場合は、代わりに geofence API の使用を検討してください。
メディア
- マニフェストの で宣言するフォアグラウンド サービス タイプ
android:foregroundServiceTypemediaPlayback- マニフェストで宣言する権限
FOREGROUND_SERVICE_MEDIA_PLAYBACKstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- ランタイムの前提条件
- なし
- 説明
音声や動画のバックグラウンド再生を続行します。Android TV でデジタル動画録画(DVR)機能をサポートします。
- 別の方法
ピクチャー イン ピクチャー動画を表示している場合は、ピクチャー イン ピクチャー モードを使用します。
メディアを処理しています
- マニフェストで宣言するフォアグラウンド サービス タイプ
android:foregroundServiceTypemediaProcessing- マニフェストで宣言する権限
FOREGROUND_SERVICE_MEDIA_PROCESSINGstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- ランタイムの前提条件
- なし
- 説明
メディア アセットに対して時間のかかるオペレーション(メディアの形式変換など)を実行するサービス。システムでは、このサービスの実行時間が制限されています。通常、この制限時間は 24 時間のうち 6 時間です。(この上限は、アプリのすべての
mediaProcessingフォアグラウンド サービスで共有されます)。アプリは、次のシナリオでメディア処理サービスを手動で停止する必要があります。
- トランスコード オペレーションが完了するか、失敗状態に達したら、サービスが
Service.stopForeground()とService.stopSelf()を呼び出してサービスを完全に停止するようにします。
- トランスコード オペレーションが完了するか、失敗状態に達したら、サービスが
タイムアウト期間が経過すると、システムはサービスの
Service.onTimeout(int, int)メソッドを呼び出します。この時点で、サービスはService.stopSelf()を呼び出すために数秒間待機します。サービスがService.stopSelf()を呼び出さないと、ANR が発生し、「<fgs_type> のフォアグラウンド サービスがタイムアウト内に停止しませんでした: <component_name>」というエラー メッセージが表示されます。注:
Service.onTimeout(int, int)は Android 14 以前では使用できません。これらのバージョンを搭載したデバイスでは、メディア処理サービスがタイムアウト期間に達すると、システムはすぐにアプリをキャッシュに保存します。そのため、アプリはタイムアウト通知を待つ必要はありません。代わりに、適切なタイミングでフォアグラウンド サービスを終了するか、バックグラウンド サービスに変更する必要があります。
メディア プロジェクション
- マニフェストの で宣言するフォアグラウンド サービス タイプ
android:foregroundServiceTypemediaProjection- マニフェストで宣言する権限
FOREGROUND_SERVICE_MEDIA_PROJECTIONstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- ランタイムの前提条件
フォアグラウンド サービスを開始する前に、
createScreenCaptureIntent()メソッドを呼び出します。そうすると、ユーザーに権限通知が表示されます。サービスを作成するには、ユーザーが権限を付与する必要があります。フォアグラウンド サービスを作成したら、
MediaProjectionManager.getMediaProjection()を呼び出すことができます。- 説明
MediaProjectionAPI を使用して、プライマリ以外のディスプレイや外部デバイスにコンテンツを投影します。このコンテンツはメディア コンテンツ以外でもかまいませんが、- 別の方法
メディアを別のデバイスにストリーミングするには、Google Cast SDK を使用します。
マイク
- マニフェストで宣言するフォアグラウンド サービスのタイプ(
android:foregroundServiceTypemicrophone- マニフェストで宣言する権限
FOREGROUND_SERVICE_MICROPHONEstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_MICROPHONE- ランタイムの前提条件
RECORD_AUDIO実行時の権限をリクエストして付与されていること。- 説明
ボイス レコーダーや通信アプリなど、バックグラウンドからマイクのキャプチャを続行します。
電話
- マニフェストで宣言するフォアグラウンド サービス タイプ(
android:foregroundServiceTypephoneCall- マニフェストで宣言する権限
FOREGROUND_SERVICE_PHONE_CALLstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_PHONE_CALL- ランタイムの前提条件
次の条件の少なくとも 1 つを満たす必要があります。
- アプリのマニフェスト
ファイルで
MANAGE_OWN_CALLS権限が宣言されている。
- アプリのマニフェスト
ファイルで
- アプリが
ROLE_DIALERロールを通じてデフォルトのダイヤル アプリである。
- アプリが
- 説明
ConnectionServiceAPI を使用して、現在の呼び出しを続行します。- 別の方法
電話、ビデオ、VoIP 通話を行う必要がある場合は、
android.telecomライブラリの使用を検討してください。CallScreeningServiceを使用して通話をスクリーニングすることを検討してください。
BOOT_COMPLETEDリモート メッセージ
- マニフェストで宣言するフォアグラウンド サービス タイプ
android:foregroundServiceTyperemoteMessaging- マニフェストで宣言する権限
FOREGROUND_SERVICE_REMOTE_MESSAGINGstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- ランタイムの前提条件
- なし
- 説明
- デバイス間でテキスト メッセージを転送します。これにより、ユーザーがデバイスを切り替えたときに、メッセージ タスクの継続性が確保されます。
ショート サービス
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypeshortService- 在清单中声明的权限
- 无
- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- 运行时前提条件
- 无
- 说明
快速完成不可中断或推迟的关键工作。
这种类型有一些独特的特征:
- 只能持续运行一小段时间(大约 3 分钟)。
- 不支持粘性前台服务。
- 无法启动其他前台服务。
- 不需要类型专用权限,不过它仍需要
FOREGROUND_SERVICE权限。 - 只有当应用当前符合启动新前台服务的条件时,
shortService才能更改为其他服务类型。 - 前台服务可以随时将其类型更改为
shortService,届时超时期限将开始。
shortService 的超时时间从调用
Service.startForeground()开始算起。应用应在发生超时之前调用Service.stopSelf()或Service.stopForeground()。否则,系统会调用新的Service.onTimeout(),让应用有机会调用stopSelf()或stopForeground()来停止其服务。调用
Service.onTimeout()后的短时间内,应用会进入缓存状态,并且不再被视为处于前台,除非用户正在主动与应用互动。应用缓存一小段时间后,服务还未停止,该应用会收到 ANR 消息。ANR 消息提及FOREGROUND_SERVICE_TYPE_SHORT_SERVICE。出于这些原因,实现Service.onTimeout()回调被视为一种最佳实践。Android 13 及更低版本中不存在
Service.onTimeout()回调。如果同一服务在此类设备上运行,则不会出现超时,也不会发生 ANR。确保您的服务在完成处理任务后立即停止,即使它尚未收到Service.onTimeout()回调也是如此。请务必注意,如果未遵循
shortService的超时设置,即使应用还有其他有效的前台服务或其他应用生命周期进程,应用也会遇到 ANR。如果应用对用户可见,或满足允许从后台启动前台服务的某一豁免条件,则使用
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE参数再次调用Service.StartForeground()会将超时时间再延长 3 分钟。如果应用对用户不可见且不满足其中一个豁免条件,则尝试启动其他前台服务(无论其类型如何)都会导致ForegroundServiceStartNotAllowedException。即使用户为您的应用停用电池优化功能,仍然会受到 shortService FGS 的影响。
如果您启动包含
shortService类型和另一个前台服务类型的前台服务,系统会忽略shortService类型声明。不过,该服务仍必须遵守其他声明类型的先决条件。如需了解详情,请参阅前台服务文档。
特殊用途
- マニフェストで宣言するフォアグラウンド サービスのタイプ
android:foregroundServiceTypespecialUse- マニフェストで宣言する権限
FOREGROUND_SERVICE_SPECIAL_USEstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_SPECIAL_USE- ランタイムの前提条件
- なし
- 説明
他のフォアグラウンド サービス タイプでは対応できない有効なフォアグラウンド サービスのユースケースに対応します。
デベロッパーは、
FOREGROUND_SERVICE_TYPE_SPECIAL_USEフォアグラウンド サービス タイプを宣言することに加えて、マニフェストでユースケースを宣言する必要があります。そのためには、<service>要素内に<property>要素を指定します。これらの値とそれに対応するユースケースは Google Play Console でアプリを送信すると審査されます。用途 自由形式のケースなので、十分な量の情報をspecialUseを使用する必要がある理由をレビュアーが確認できるようにするための情報 あります。<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
除外されたシステム
- マニフェストで申告するフォアグラウンド サービスのタイプ
android:foregroundServiceTypesystemExempted- マニフェストで宣言する権限
FOREGROUND_SERVICE_SYSTEM_EXEMPTEDstartForeground()に渡す定数FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- ランタイムの前提条件
- なし
- 説明
フォアグラウンド サービスを引き続き使用するために、システムアプリと特定のシステム統合用に予約されています。
このタイプを使用するには、アプリが次の条件の少なくとも 1 つを満たしている必要があります。
- デバイスがデモモードの状態にある
- アプリがデバイス所有者である
- アプリがプロファイラ所有者である
ROLE_EMERGENCYのロールを持つ緊急情報アプリである- デバイス管理アプリである
SCHEDULE_EXACT_ALARM権限またはUSE_EXACT_ALARM権限を保持しているアプリVPN アプリ([設定] > [ネットワークとインターネット] > [VPN] で設定)
そうしないと、このタイプを宣言したときに
ForegroundServiceTypeNotAllowedExceptionがスローされます。
フォアグラウンド サービス タイプの使用に対する Google Play ポリシーの適用
Android 14 以降をターゲットとするアプリの場合は、Google Play Console の [アプリのコンテンツ] ページ([ポリシー] > [アプリのコンテンツ])で、アプリのフォアグラウンド サービスのタイプを申告する必要があります。Google Play Console でフォアグラウンド サービスのタイプを申告する方法について詳しくは、フォアグラウンド サービスと全画面インテントの要件についてをご覧ください。