Android 14(API レベル 34)以降では、フォアグラウンド サービスごとに適切なサービスタイプを宣言する必要があります。つまり、FOREGROUND_SERVICE
権限をリクエストするだけでなく、アプリ マニフェストでサービスタイプを宣言し、そのタイプに適したフォアグラウンド サービスの権限をリクエストする必要があります。さらに、フォアグラウンド サービスのタイプによっては、サービスを起動する前に実行時の権限をリクエストする必要があります。
カメラ
- マニフェストで
android:foregroundServiceType
の下で申告するフォアグラウンド サービス タイプ camera
- マニフェストで宣言する権限
FOREGROUND_SERVICE_CAMERA
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_CAMERA
- ランタイムの前提条件
CAMERA
の実行時の権限をリクエストし、付与される注:
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 つをリクエストし、付与されている。
注:
BODY_SENSORS
の実行時の権限には、使用中に対する制限が適用されます。このため、いくつかの例外を除き、アプリがバックグラウンドで動作しているときにボディセンサーを使用するhealth
フォアグラウンド サービスを作成することはできません。詳しくは、使用中の権限を必要とするフォアグラウンド サービスの起動に関する制限をご覧ください。- 説明
フィットネス カテゴリのアプリ(エクササイズ トラッカーなど)をサポートする、長時間にわたるユースケース。
位置情報
- マニフェストで宣言するフォアグラウンド サービスのタイプ
android:foregroundServiceType
location
- マニフェストで宣言する権限
FOREGROUND_SERVICE_LOCATION
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_LOCATION
- ランタイムの前提条件
ユーザーが位置情報サービスを有効にし、アプリに次の実行時の権限のうち少なくとも 1 つが付与されている必要があります。
注: ユーザーが位置情報サービスを有効にし、実行時の権限へのアクセスを許可したことを確認するには、
PermissionChecker#checkSelfPermission()
を使用します。注: 位置情報に関する実行時の権限には、使用中に関する制限が適用されます。このため、アプリがバックグラウンドで実行されている間は、
ACCESS_BACKGROUND_LOCATION
ランタイム権限を付与されていない限り、location
フォアグラウンド サービスを作成できません。詳しくは、使用中の権限が必要なフォアグラウンド サービスの起動に関する制限をご覧ください。- 説明
ナビゲーションや現在地の共有など、位置情報へのアクセスが必要な長時間にわたるユースケース。
- 代替方法
ユーザーが特定の場所に到達したときにアプリをトリガーする必要がある場合は、代わりに geofence API の使用を検討してください。
Media
- マニフェストで申告するフォアグラウンド サービスのタイプ
android:foregroundServiceType
mediaPlayback
- マニフェストで宣言する権限
FOREGROUND_SERVICE_MEDIA_PLAYBACK
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- ランタイムの前提条件
- なし
- 説明
- 音声や動画のバックグラウンド再生を続行します。Android TV でデジタル動画録画(DVR)機能をサポートします。
- 代替方法
- ピクチャー イン ピクチャー動画を表示する場合は、ピクチャー イン ピクチャー モードを使用します。
メディア プロジェクション
- マニフェストで申告するフォアグラウンド サービスのタイプ
android:foregroundServiceType
mediaProjection
- マニフェストで宣言する権限
FOREGROUND_SERVICE_MEDIA_PROJECTION
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- ランタイムの前提条件
フォアグラウンド サービスを開始する前に
createScreenCaptureIntent()
メソッドを呼び出します。これにより、ユーザーに権限の通知が表示されます。サービスを作成する前に、ユーザーが権限を付与する必要があります。フォアグラウンド サービスを作成したら、
MediaProjectionManager.getMediaProjection()
を呼び出すことができます。- 説明
MediaProjection
API を使用して、プライマリ以外のディスプレイまたは外部デバイスにコンテンツを投影します。このコンテンツはメディア コンテンツ以外でもかまいません。- 代替方法
別のデバイスにメディアをストリーミングするには、Google Cast SDK を使用します。
マイク
- マニフェストで申告するフォアグラウンド サービスのタイプ
android:foregroundServiceType
microphone
- マニフェストで宣言する権限
FOREGROUND_SERVICE_MICROPHONE
startForeground()
に渡す定数FOREGROUND_SERVICE_TYPE_MICROPHONE
- ランタイムの前提条件
RECORD_AUDIO
の実行時の権限をリクエストし、付与される。注:
RECORD_AUDIO
の実行時の権限には、使用中に対する制限が適用されます。このため、いくつかの例外を除き、アプリがバックグラウンドで実行されている間はmicrophone
フォアグラウンド サービスを作成できません。詳しくは、使用中の権限を必要とするフォアグラウンド サービスの起動に関する制限をご覧ください。- 説明
ボイス レコーダーや通信アプリなど、バックグラウンドからマイクのキャプチャを続行します。
電話
- マニフェストで申告するフォアグラウンド サービスのタイプ
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 ポリシーの適用
Android 14 以降をターゲットとするアプリの場合、Google Play Console の [アプリのコンテンツ] ページ([ポリシー] > [アプリのコンテンツ])でアプリのフォアグラウンド サービスのタイプを申告する必要があります。Google Play Console でフォアグラウンド サービスのタイプを申告する方法について詳しくは、フォアグラウンド サービスと全画面インテントの要件についてをご覧ください。