フォアグラウンド サービスを宣言して権限をリクエストする

アプリのマニフェストで、<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 という 1 つのタイプしかありません。サービスに複数のタイプが適用される場合は、| 演算子で区切ります。たとえば、サービスでカメラとマイクを使用する場合は、次のように宣言します。

    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 以降をターゲットとするアプリのベスト プラクティスを使用しています。