フォアグラウンド サービスのタイプ

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 つを満たす必要があります。

説明

Bluetooth、NFC、IR、USB、またはネットワーク接続を必要とする外部デバイスとの通信。

代替

アプリが外部デバイスへの継続的なデータ転送を行う必要がある場合は、代わりにコンパニオン デバイス マネージャーを使用することを検討してください。companion device presence 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 つを満たす必要があります。

説明

フィットネス カテゴリのアプリ(エクササイズ トラッカーなど)をサポートする、長時間にわたるユースケース。

位置情報

要在清单中的以下位置声明的前台服务类型
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.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 つを満たしている必要があります。

フォアグラウンド サービス タイプの使用に対する Google Play ポリシーの適用

Android 14 以降をターゲットとするアプリの場合は、Google Play Console の [アプリのコンテンツ] ページ([ポリシー] > [アプリのコンテンツ])で、アプリのフォアグラウンド サービスのタイプを申告する必要があります。Google Play Console でフォアグラウンド サービスのタイプを申告する方法について詳しくは、フォアグラウンド サービスと全画面インテントの要件についてをご覧ください。