从 Android 14(API 级别 34)开始,您必须为每项前台服务声明相应的服务类型。这意味着,您必须在应用清单中声明服务类型,并请求与该类型相符的前台服务权限(除了请求 FOREGROUND_SERVICE 权限之外)。此外,根据前台服务类型,您可能必须在启动服务之前请求运行时权限。
相机
- 要在清单中 
android:foregroundServiceType下声明的前台服务类型 camera- 要在清单中声明的权限
 FOREGROUND_SERVICE_CAMERA- 要传递给 
startForeground()的常量 FOREGROUND_SERVICE_TYPE_CAMERA- 运行时前提条件
 请求并被授予
CAMERA运行时权限- 说明
 继续在后台访问相机,例如支持多任务的视频聊天应用。
连接的设备
- 要在清单中的以下位置声明的前台服务类型
 android:foregroundServiceTypeconnectedDevice- 在清单中声明的权限
 FOREGROUND_SERVICE_CONNECTED_DEVICE- 要传递给 
startForeground()的常量 FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- 运行时前提条件
 必须至少满足以下其中一个条件:
在清单中至少声明以下其中一项权限:
至少请求并被授予以下其中一项运行时权限:
- 说明
 与需要蓝牙、NFC、IR、USB 或网络连接的外部设备进行互动。
- 替代方案
 如果您的应用需要向外部设备持续传输数据,请考虑改用配套设备管理器。使用配套设备感知 API,可帮助您的应用在配套设备在范围内时保持运行。
如果您的应用需要扫描蓝牙设备,请考虑改用 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.
健康
- 要在清单中的以下位置声明的前台服务类型
 android:foregroundServiceTypehealth- 在清单中声明的权限
 FOREGROUND_SERVICE_HEALTH- 要传递给 
startForeground()的常量 FOREGROUND_SERVICE_TYPE_HEALTH- 运行时前提条件
 必须至少满足以下其中一个条件:
在清单中声明
HIGH_SAMPLING_RATE_SENSORS权限。至少请求并被授予以下其中一项运行时权限:
- 说明
 为健身类别的应用(例如锻炼追踪器)提供支持的所有长时间运行的用例。
位置
- 要在清单中的以下位置声明的前台服务类型
 android:foregroundServiceTypelocation- 在清单中声明的权限
 FOREGROUND_SERVICE_LOCATION- 要传递给 
startForeground()的常量 FOREGROUND_SERVICE_TYPE_LOCATION- 运行时前提条件
 用户必须已启用位置信息服务,并且应用必须至少获得以下一项运行时权限:
- 说明
 需要位置信息使用权的长时间运行的用例,例如导航和位置信息分享。
- 替代方案
 如果您的应用需要在用户到达特定位置时触发,请考虑改用 Geofence API。
媒体
- 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.
媒体投屏
- Foreground service type to declare in manifest under
 android:foregroundServiceTypemediaProjection- 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
MediaProjectionAPIs. This content doesn't have to be exclusively media content.- Alternatives
 To stream media to another device, use the Google Cast SDK.
麦克风
- 要在清单中声明的前台服务类型(位于
 android:foregroundServiceTypemicrophone- 要在清单中声明的权限
 FOREGROUND_SERVICE_MICROPHONE- 要传递给 
startForeground()的常量 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.
远程消息传递
- Foreground service type to declare in manifest under
 android:foregroundServiceTyperemoteMessaging- Permission to declare in your manifest
 FOREGROUND_SERVICE_REMOTE_MESSAGING- Constant to pass to 
startForeground() FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- Runtime prerequisites
 - None
 - Description
 - Transfer text messages from one device to another. Assists with continuity of a user's messaging tasks when they switch devices.
 
短期服务
- Foreground service type to declare in manifest under
 android:foregroundServiceTypeshortService- Permission to declare in your manifest
 - None
 - Constant to pass to 
startForeground() FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- Runtime prerequisites
 - None
 - Description
 Quickly finish critical work that cannot be interrupted or postponed.
This type has some unique characteristics:
- Can only run for a short period of time (about 3 minutes).
 - No support for sticky foreground services.
 - Cannot start other foreground services.
 - Doesn't require a type-specific permission, though it still
requires the 
FOREGROUND_SERVICEpermission. - A 
shortServicecan only change to another service type if the app is currently eligible to start a new foreground service. - A foreground service can change its type to 
shortServiceat any time, at which point the timeout period begins. 
The timeout for shortService begins from the moment that
Service.startForeground()is called. The app is expected to callService.stopSelf()orService.stopForeground()before the timeout occurs. Otherwise, the newService.onTimeout()is called, giving apps a brief opportunity to callstopSelf()orstopForeground()to stop their service.A short time after
Service.onTimeout()is called, the app enters a cached state and is no longer considered to be in the foreground, unless the user is actively interacting with the app. A short time after the app is cached and the service has not stopped, the app receives an ANR. The ANR message mentionsFOREGROUND_SERVICE_TYPE_SHORT_SERVICE. For these reasons, it's considered best practice to implement theService.onTimeout()callback.The
Service.onTimeout()callback doesn't exist on Android 13 and lower. If the same service runs on such devices, it doesn't receive a timeout, nor does it ANR. Make sure that your service stops as soon as it finishes the processing task, even if it hasn't received theService.onTimeout()callback yet.It's important to note that if the timeout of the
shortServiceis not respected, the app will ANR even if it has other valid foreground services or other app lifecycle processes running.If an app is visible to the user or satisfies one of the exemptions that allow foreground services to be started from the background, calling
Service.StartForeground()again with theFOREGROUND_SERVICE_TYPE_SHORT_SERVICEparameter extends the timeout by another 3 minutes. If the app isn't visible to the user and doesn't satisfy one of the exemptions, any attempt to start another foreground service, regardless of type, causes aForegroundServiceStartNotAllowedException.If a user disables battery optimization for your app, it's still affected by the timeout of shortService FGS.
If you start a foreground service that includes the
shortServicetype and another foreground service type, the system ignores theshortServicetype declaration. However, the service must still adhere to the prerequisites of the other declared types. For more information, see the Foreground services documentation.
特殊用途
- Foreground service type to declare in manifest under
 android:foregroundServiceTypespecialUse- Permission to declare in your manifest
 FOREGROUND_SERVICE_SPECIAL_USE- Constant to pass to 
startForeground() FOREGROUND_SERVICE_TYPE_SPECIAL_USE- Runtime prerequisites
 - None
 - Description
 Covers any valid foreground service use cases that aren't covered by the other foreground service types.
In addition to declaring the
FOREGROUND_SERVICE_TYPE_SPECIAL_USEforeground service type, developers should declare use cases in the manifest. To do so, they specify the<property>element within the<service>element. These values and corresponding use cases are reviewed when you submit your app in the Google Play Console. The use cases you provide are free-form, and you should make sure to provide enough information to let the reviewer see why you need to use thespecialUsetype.<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
系统豁免
- Foreground service type to declare in manifest under
 android:foregroundServiceTypesystemExempted- Permission to declare in your manifest
 FOREGROUND_SERVICE_SYSTEM_EXEMPTED- Constant to pass to 
startForeground() FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- Runtime prerequisites
 - None
 - Description
 Reserved for system applications and specific system integrations, to continue to use foreground services.
To use this type, an app must meet at least one of the following criteria:
- Device is in demo mode state
 - App is a Device Owner
 - App is a Profiler Owner
 - Safety Apps that have the 
ROLE_EMERGENCYrole - Device Admin apps
 - Apps holding 
SCHEDULE_EXACT_ALARMorUSE_EXACT_ALARMpermission VPN apps (configured using Settings > Network & Internet > VPN)
Otherwise, declaring this type causes the system to throw a
ForegroundServiceTypeNotAllowedException.
使用前台服务类型时强制执行的 Google Play 政策
如果您的应用以 Android 14 或更高版本为目标平台,您需要在 Play 管理中心的“应用内容”页面(政策 > 应用内容)中声明应用的前台服务类型。如需详细了解如何在 Play 管理中心内声明前台服务类型,请参阅了解前台服务和全屏 intent 要求。