Как декларировать активные службы и запрашивать разрешения

В манифесте приложения объявите каждую активную службу с помощью элемента <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 или выше.