Android 14(API レベル 34)以降では、フォアグラウンド サービスごとに適切なサービスタイプを宣言する必要があります。つまり、アプリのマニフェストでサービスタイプを宣言し、そのタイプに適したフォアグラウンド サービス権限をリクエストする必要があります(FOREGROUND_SERVICE
権限のリクエストに加えて)。また、フォアグラウンド サービスのタイプによっては、サービスを起動する前に実行時の権限をリクエストしなければならない場合があります。
カメラ
android:foregroundServiceType
でマニフェストで宣言するフォアグラウンド サービスのタイプcamera
- マニフェストで宣言する権限
FOREGROUND_SERVICE_CAMERA
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_CAMERA
- ランタイムの前提条件
CAMERA
の実行時の権限をリクエストして付与されている- 説明
マルチタスクが可能なビデオチャット アプリなど、引き続きバックグラウンドからカメラにアクセスします。
接続されたデバイス
- マニフェストで申告するフォアグラウンド サービスのタイプ
android:foregroundServiceType
connectedDevice
- マニフェストで宣言する権限
FOREGROUND_SERVICE_CONNECTED_DEVICE
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- ランタイムの前提条件
次の条件の少なくとも 1 つを満たす必要があります。
マニフェストで次の権限のうち少なくとも 1 つを宣言します。
次の実行時の権限の少なくとも 1 つをリクエストし、付与されている。
UsbManager.requestPermission()
を呼び出します。
- 説明
Bluetooth、NFC、IR、USB、またはネットワーク接続を必要とする外部デバイスとの通信。
- 代替方法
アプリが外部デバイスへのデータを継続的に転送する必要がある場合は、代わりにコンパニオン デバイス マネージャーの使用を検討してください。コンパニオン デバイス プレゼンス API を使用すると、コンパニオン デバイスが範囲内にあってもアプリを実行し続けることができます。
アプリで Bluetooth デバイスをスキャンする必要がある場合は、代わりに Bluetooth scan API の使用を検討してください。
データの同期
- マニフェストの で宣言するフォアグラウンド サービス タイプ
android:foregroundServiceType
dataSync
- マニフェストで宣言する権限
FOREGROUND_SERVICE_DATA_SYNC
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_DATA_SYNC
- ランタイムの前提条件
- なし
- 説明
次のようなデータ転送オペレーション:
- データのアップロードまたはダウンロード
- バックアップと復元オペレーション
- インポート / エクスポート オペレーション
- データの取得
- ローカル ファイルの処理
- ネットワーク経由でのデバイスとクラウド間のデータ転送
- 代替
詳しくは、データ同期フォアグラウンド サービスに代わる方法をご覧ください。
健康
- マニフェストで宣言するフォアグラウンド サービス タイプ
android:foregroundServiceType
health
- マニフェストで宣言する権限
FOREGROUND_SERVICE_HEALTH
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_HEALTH
- ランタイムの前提条件
次の条件の少なくとも 1 つを満たす必要があります。
マニフェストで
HIGH_SAMPLING_RATE_SENSORS
権限を宣言します。次の実行時の権限を少なくとも 1 つリクエストし、付与されていること。
- 説明
フィットネス カテゴリのアプリ(エクササイズ トラッカーなど)をサポートする、長時間にわたるユースケース。
位置情報
- Foreground service type to declare in manifest under
android:foregroundServiceType
location
- 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.
メディア
- マニフェストの で宣言するフォアグラウンド サービス タイプ
android:foregroundServiceType
mediaPlayback
- マニフェストで宣言する権限
FOREGROUND_SERVICE_MEDIA_PLAYBACK
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- ランタイムの前提条件
- なし
- 説明
音声や動画のバックグラウンド再生を続行します。Android TV でデジタル動画録画(DVR)機能をサポートします。
- 代替
ピクチャー イン ピクチャー動画を表示している場合は、ピクチャー イン ピクチャー モードを使用します。
メディアを処理しています
- Foreground service type to declare in manifest under
android:foregroundServiceType
mediaProcessing
- 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
mediaProcessing
foreground 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.
メディア プロジェクション
- Foreground service type to declare in manifest under
android:foregroundServiceType
mediaProjection
- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- Runtime prerequisites
Call the
createScreenCaptureIntent()
method before starting the foreground service. Doing so shows a permission notification to the user; the user must grant the permission before you can create the service.After you have created the foreground service, you can call
MediaProjectionManager.getMediaProjection()
.- Description
Project content to non-primary display or external device using the
MediaProjection
APIs. This content doesn't have to be exclusively media content.- Alternatives
To stream media to another device, use the Google Cast SDK.
マイク
- マニフェストの で宣言するフォアグラウンド サービス タイプ
android:foregroundServiceType
microphone
- マニフェストで宣言する権限
FOREGROUND_SERVICE_MICROPHONE
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_MICROPHONE
- ランタイムの前提条件
RECORD_AUDIO
の実行時の権限をリクエストし、付与されている。- 説明
ボイス レコーダーや通信アプリなど、バックグラウンドからマイクのキャプチャを続行します。
電話
- マニフェストの で宣言するフォアグラウンド サービス タイプ
android:foregroundServiceType
phoneCall
- マニフェストで宣言する権限
FOREGROUND_SERVICE_PHONE_CALL
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_PHONE_CALL
- ランタイムの前提条件
次の条件の少なくとも 1 つを満たす必要があります。
- アプリがマニフェスト ファイルで
MANAGE_OWN_CALLS
権限を宣言している。
- アプリがマニフェスト ファイルで
ROLE_DIALER
ロールを通じて、アプリがデフォルトのダイヤルアプリである。
- 説明
ConnectionService
API を使用して、現在の呼び出しを続行します。- 代替
電話、ビデオ、VoIP 通話を行う必要がある場合は、
android.telecom
ライブラリの使用を検討してください。CallScreeningService
を使用して通話をスクリーニングすることを検討してください。
リモート メッセージ
- マニフェストで申告するフォアグラウンド サービスのタイプ
android:foregroundServiceType
remoteMessaging
- マニフェストで宣言する権限
FOREGROUND_SERVICE_REMOTE_MESSAGING
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
- ランタイムの前提条件
- なし
- 説明
- デバイス間でテキスト メッセージを転送します。これにより、ユーザーがデバイスを切り替えたときに、メッセージ タスクの継続性が確保されます。
ショート サービス
- マニフェストで申告するフォアグラウンド サービスのタイプ
android:foregroundServiceType
shortService
- マニフェストで宣言する権限
- なし
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:foregroundServiceType
specialUse
- マニフェストで宣言する権限
FOREGROUND_SERVICE_SPECIAL_USE
startForeground()
に渡す定数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:foregroundServiceType
systemExempted
- マニフェストで宣言する権限
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
- ランタイムの前提条件
- なし
- 説明
フォアグラウンド サービスを引き続き使用するために、システムアプリと特定のシステム統合用に予約されています。
このタイプを使用するには、アプリが次の条件の少なくとも 1 つを満たしている必要があります。
- デバイスがデモモードの状態にある
- アプリがデバイス所有者である
- アプリがプロファイラ所有者である
ROLE_EMERGENCY
のロールを持つ緊急情報アプリである- デバイス管理アプリである
SCHEDULE_EXACT_ALARM
権限またはUSE_EXACT_ALARM
権限を保持しているアプリVPN アプリ([設定] > [ネットワークとインターネット] > [VPN] で設定)
そうしないと、このタイプを宣言したときに
ForegroundServiceTypeNotAllowedException
がスローされます。
フォアグラウンド サービス タイプの使用に対する Google Play ポリシーの適用
If your app targets Android 14 or higher, you'll need to declare your app's foreground service types in the Play Console's app content page (Policy > App content). For more information on how to declare your foreground service types in Play Console, see Understanding foreground service and full-screen intent requirements.