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
- 运行时前提条件
必须至少满足以下其中一个条件:
在清单中至少声明以下其中一项权限:
请求并获得以下至少一项运行时权限:
- 说明
与需要蓝牙、NFC、IR、USB 或网络连接的外部设备进行互动。
- 替代方案
如果您的应用需要持续将数据传输到外部设备,请考虑改用配套设备管理器。使用配套设备在线状态 API 帮助您的应用在配套设备在范围内时保持运行。
如果您的应用需要扫描蓝牙设备,请考虑改用 Bluetooth Scanner API。
データの同期
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceType
dataSync
- 在清单中声明的权限
FOREGROUND_SERVICE_DATA_SYNC
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_DATA_SYNC
- 运行时前提条件
- 无
- 说明
数据传输操作,例如:
- 数据上传或下载
- 备份和恢复操作
- 导入或导出操作
- 获取数据
- 本地文件处理
- 通过网络在设备和云端之间传输数据
- 替代方案
如需了解详情,请参阅数据同步前台服务的替代方案。
健康
- Foreground service type to declare in manifest under
android:foregroundServiceType
health
- 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_SENSORS
permission in your manifest.Request and be granted at least one of the following runtime permissions:
- Description
Any long-running use cases to support apps in the fitness category such as exercise trackers.
位置情報
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceType
location
- 在清单中声明的权限
FOREGROUND_SERVICE_LOCATION
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_LOCATION
- 运行时前提条件
用户必须已启用位置信息服务,并且应用必须至少获得以下一项运行时权限:
- 说明
需要位置信息使用权的长时间运行的用例,例如导航和位置信息分享。
- 替代方案
如果您的应用需要在用户到达特定位置时触发,请考虑改用 Geofence API。
メディア
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceType
mediaPlayback
- 在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PLAYBACK
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- 运行时前提条件
- 无
- 说明
在后台继续播放音频或视频。在 Android TV 上支持数字视频录制 (DVR) 功能。
- 替代方案
如果您要显示画中画视频,请使用画中画模式。
メディアを処理しています
- マニフェストで申告するフォアグラウンド サービスのタイプ
android:foregroundServiceType
mediaProcessing
- マニフェストで宣言する権限
FOREGROUND_SERVICE_MEDIA_PROCESSING
startForeground()
に渡す定数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: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
の実行時の権限をリクエストして付与される。- 説明
ボイス レコーダーや通信アプリなど、バックグラウンドからマイクのキャプチャを続行します。
電話
- マニフェストで宣言するフォアグラウンド サービス タイプ
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>
元素。这些值和相应的应用场景 。用途 您提供的案例均为自由形式,因此,您应确保提供足够的 提供相关信息,让审核者了解您为何需要使用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 でフォアグラウンド サービスのタイプを申告する方法について詳しくは、フォアグラウンド サービスと全画面インテントの要件についてをご覧ください。