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

アプリのマニフェストで、アプリの各フォアグラウンド サービスを <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 以降をターゲットとするアプリのベスト プラクティスを使用しています。