声明前台服务并请求权限

在应用的清单中,使用 <service> 元素声明应用的每项前台服务。对于每项服务,请使用 android:foregroundServiceType 属性声明该服务执行的工作类型。

此外,请请求前台服务所需的任何权限。

版本兼容性

声明前台服务和请求权限的要求因应用的目标 API 级别而异。本页介绍了针对以 API 级别 34 或更高级别为目标的应用的要求。如需了解早期平台版本中前台服务的变更,请参阅前台服务变更。

在应用清单中声明前台服务

以下代码展示了如何声明媒体播放前台服务。 您可以使用此类服务播放音乐。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
  <application ...>

    <service
        android:name=".MyMediaPlaybackService"
        android:foregroundServiceType="mediaPlayback"
        android:exported="false">
    </service>
  </application>
</manifest>

代码要点

  • 在此示例中,服务只有一种类型,即 media。如果您的服务适用多种类型,请使用 | 运算符分隔。例如,如果您的服务使用相机和麦克风,请按如下方式声明:

    android:foregroundServiceType="camera|microphone"
    
  • 根据应用的目标 API 级别,您可能需要在应用清单中声明前台服务。前台服务的变更中介绍了针对特定 API 级别的要求。

    如果您尝试创建前台服务,但其类型未在清单中声明,系统会在调用 startForeground() 时抛出 MissingForegroundServiceTypeException。

    即使不是必需的,最佳实践也是声明所有前台服务并提供其服务类型。

请求前台服务权限

以下代码展示了如何为使用摄像头的前台服务请求权限。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA"/>

    <application ...>
        ...
    </application>
</manifest>

代码要点

  • 此代码遵循了适用于以 API 级别 34 或更高级别为目标平台的应用的最佳实践。