Android 14(API レベル 34)以降では、フォアグラウンド サービスごとに適切なサービスタイプを宣言する必要があります。つまり、アプリのマニフェストでサービスタイプを宣言し、そのタイプに適したフォアグラウンド サービス権限をリクエストする必要があります(FOREGROUND_SERVICE 権限のリクエストに加えて)。また、フォアグラウンド サービスのタイプによっては、サービスを起動する前に実行時の権限をリクエストしなければならない場合があります。
カメラ
- Foreground service type to declare in manifest under
android:foregroundServiceType camera- Permission to declare in your manifest
FOREGROUND_SERVICE_CAMERA- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_CAMERA- Runtime prerequisites
Request and be granted the
CAMERAruntime permission- Description
Continue to access the camera from the background, such as video chat apps that allow for multitasking.
接続されたデバイス
- マニフェストで宣言するフォアグラウンド サービス タイプ
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 を使用することを検討してください。
データの同期
- Foreground service type to declare in manifest under
android:foregroundServiceTypedataSync- Permission to declare in your manifest
FOREGROUND_SERVICE_DATA_SYNC- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_DATA_SYNC- Runtime prerequisites
- None
- Description
Data transfer operations, such as the following:
- Data upload or download
- Backup-and-restore operations
- Import or export operations
- Fetch data
- Local file processing
- Transfer data between a device and the cloud over a network
- Alternatives
See Alternatives to data sync foreground services for detailed information.
健康
- Foreground service type to declare in manifest under
android:foregroundServiceTypehealth- Permission to declare in your manifest
FOREGROUND_SERVICE_HEALTH- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_HEALTH- Runtime prerequisites
At least one of the following conditions must be true:
Declare the
HIGH_SAMPLING_RATE_SENSORSpermission in your manifest.Request and be granted at least one of the following runtime permissions:
BODY_SENSORSon API 35 and lowerREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
- Description
Any long-running use cases to support apps in the fitness category such as exercise trackers.
位置情報
- Foreground service type to declare in manifest under
android:foregroundServiceTypelocation- Permission to declare in your manifest
FOREGROUND_SERVICE_LOCATION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_LOCATION- Runtime prerequisites
The user must have enabled location services and the app must be granted at least one of the following runtime permissions:
- Description
Long-running use cases that require location access, such as navigation and location sharing.
- Alternatives
If your app needs to be triggered when the user reaches specific locations, consider using the geofence API instead.
メディア
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaPlayback- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Runtime prerequisites
- None
- Description
Continue audio or video playback from the background. Support Digital Video Recording (DVR) functionality on Android TV.
- Alternatives
If you're showing picture-in-picture video, use Picture-in-Picture mode.
メディアを処理しています
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaProcessing- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROCESSING- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- Runtime prerequisites
- None
- Description
Service for performing time-consuming operations on media assets, like converting media to different formats. The system allows this service a limited time to run; under normal circumstances, this time limit would be 6 hours out of every 24. (This limit is shared by all of an app's
mediaProcessingforeground services.)Your app should manually stop the media processing service in the following scenario:
- When the transcoding operation finishes or reaches a failure state, have the
service call
Service.stopForeground()andService.stopSelf()to stop the service completely.
- When the transcoding operation finishes or reaches a failure state, have the
service call
If the timeout period is reached, the system calls the service's
Service.onTimeout(int, int)method. At this time, the service has a few seconds to callService.stopSelf(). If the service does not callService.stopSelf(), an ANR will occur with this error message: "A foreground service of <fgs_type> did not stop within its timeout: <component_name>".Note:
Service.onTimeout(int, int)is not available on Android 14 or lower. On devices running those versions, if a media processing service reaches the timeout period, the system immediately caches the app. For this reason, your app shouldn't wait to get a timeout notification. Instead, it should terminate the foreground service or change it to a background service as soon as appropriate.
メディア プロジェクション
- マニフェストの で宣言するフォアグラウンド サービス タイプ
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の実行時の権限をリクエストして付与されている。- 説明
ボイス レコーダーや通信アプリなど、バックグラウンドからマイクのキャプチャを続行します。
電話
- Foreground service type to declare in manifest under
android:foregroundServiceTypephoneCall- Permission to declare in your manifest
FOREGROUND_SERVICE_PHONE_CALL- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_PHONE_CALL- Runtime prerequisites
At least one of these conditions must be true:
- App has declared the
MANAGE_OWN_CALLSpermission in its manifest file.
- App has declared the
- App is the default dialer app through the
ROLE_DIALERrole.
- App is the default dialer app through the
- Description
Continue an ongoing call using the
ConnectionServiceAPIs.- Alternatives
If you need to make phone, video, or VoIP calls, consider using the
android.telecomlibrary.Consider using
CallScreeningServiceto screen calls.
リモート メッセージ
- マニフェストで宣言するフォアグラウンド サービス タイプ
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 でフォアグラウンド サービスのタイプを申告する方法について詳しくは、フォアグラウンド サービスと全画面インテントの要件についてをご覧ください。