<サービス>

構文:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "health" | "location" |
                                        "mediaPlayback" | "mediaProjection" |
                                        "microphone" | "phoneCall" |
                                        "remoteMessaging" | "shortService" |
                                        "specialUse" | "systemExempted"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string"
         android:stopWithTask=["true" | "false"]>
    ...
</service>
上位の要素:
<application>
含めることのできる要素:
<intent-filter>
<meta-data>
説明:
サービス(Service サブクラス)をアプリのコンポーネントの一つとして宣言します。アクティビティとは異なり、サービスにはビジュアル ユーザー インターフェースがありません。長時間実行のバックグラウンド オペレーションや、他のアプリから呼び出せるリッチ コミュニケーション API の実装に使用します。

サービスはすべて、マニフェスト ファイルの <service> 要素で表す必要があります。宣言されていないものはシステムで確認できず、実行されることはありません。

注: Android 8.0(API レベル 26)以降では、バックグラウンドで実行されているときのアプリの動作が制限されています。詳細については、バックグラウンドでの実行の制限バックグラウンドでの位置情報の制限に関するガイドをご覧ください。

属性:
android:description
ユーザーが読むことができる、サービスを説明する文字列です。description は文字列リソースへの参照として設定します。そうすることで、ユーザー インターフェースの他の文字列と同じようにローカライズできるようになります。
android:directBootAware

サービスがダイレクト ブートに対応しているかどうか、つまり、ユーザーがデバイスのロックを解除する前にアクティビティを実行できるかどうか。

注: ダイレクト ブート中、アプリのサービスはデバイス保護ストレージに保存されているデータにのみアクセスできます。

デフォルト値は "false" です。

android:enabled
システムがサービスをインスタンス化できるかどうか。できる場合は "true"、できない場合は "false" です。デフォルト値は "true" です。

<application> 要素には、サービスを含むすべてのアプリ コンポーネントに適用される独自の enabled 属性があります。サービスを有効にするには、<application> 属性と <service> 属性の両方を "true"(両属性のデフォルト値)に設定する必要があります。いずれかが "false" の場合、サービスは無効になり、インスタンス化できなくなります。

android:exported
他のアプリのコンポーネントがサービスを呼び出せるかどうか、操作できるかどうかを指定します。可能な場合は "true"、そうでない場合は "false" に設定します。値が "false" の場合、同じアプリのコンポーネントまたはユーザー ID が同一のアプリのコンポーネントのみが、サービスの開始またはサービスへのバインドを行えます。

デフォルト値は、サービスにインテント フィルタが含まれているかどうかによって異なります。フィルタがない場合は、正確なクラス名を指定することでのみ呼び出すことができます。これは、サービスがアプリの内部でのみ使用されることを意味します(他ではクラス名がわからないため)。そのため、この場合のデフォルト値は "false" です。一方、少なくとも 1 つのフィルタが存在している場合、サービスは外部から使用できるため、デフォルト値は "true" です。

この属性を使用すること以外にも、サービスの他のアプリへの公開を制限する方法はあります。サービスを操作できる外部エンティティを制限する権限を使用することもできます。permission 属性をご覧ください。

android:foregroundServiceType

サービスが特定のユースケースを満たすフォアグラウンド サービスであることを指定します。たとえば、フォアグラウンド サービスのタイプが "location" の場合、アプリがデバイスの現在位置情報を取得し、通常は、デバイスの位置情報に関連するユーザーが開始したアクションを続行することを示します。

複数のフォアグラウンド サービスのタイプを特定のサービスに割り当てることができます。

android:icon
サービスを表すアイコン。この属性は、画像の定義を含むドローアブル リソースへの参照として設定されます。この属性を設定しなかった場合、アプリ用に指定されているアイコンが代わりに使用されます。<application> 要素の icon 属性をご覧ください。

サービスのアイコンは、この属性と <application> 要素のどちらで設定したかに関係なく、サービスのすべてのインテント フィルタのデフォルト アイコンにもなります(<intent-filter> 要素の icon 属性を参照)。

android:isolatedProcess
"true" に設定すると、このサービスは、システムの他の部分から分離された、独自の権限を持たない、特別なプロセスの下で実行されます。通信は、Service API 経由でのみ行われます(バインディングと開始)。
android:label
サービスのユーザー可読形式の名前。この属性を設定しなかった場合、アプリ用に設定されているラベルが代わりに使用されます。<application> 要素の label 属性をご覧ください。

サービスのラベルは、この属性と <application> 要素のどちらで設定したかに関係なく、サービスのすべてのインテント フィルタのデフォルト ラベルにもなります(<intent-filter> 要素の label 属性を参照)。

ラベルは文字列リソースへの参照として設定します。そうすることで、ユーザー インターフェースの他の文字列と同じようにローカライズできるようになります。ただし、アプリ開発の便宜上、未加工の文字列として設定することもできます。

android:name
サービスを実装する Service サブクラスの名前。これは完全修飾クラス名です("com.example.project.RoomService" など)。ただし、短縮形として名前の最初の文字をピリオドにした場合(".RoomService" など)、<manifest> 要素で指定したパッケージ名に付加されます。

アプリの公開後は、android:exported="false" を設定しない限り、この名前を変更しないでください

デフォルト値はありません。名前の指定は必須です。

android:permission
サービスを開始するかサービスにバインドする際にエンティティが必要とする権限の名前。startService()bindService()stopService() の呼び出し元にこの権限が付与されていない場合、メソッドが機能せず、Intent オブジェクトはサービスに配信されません。

この属性が設定されていない場合、<application> 要素の permission 属性で設定された権限がサービスに適用されます。どちらの属性も設定されていない場合、サービスは権限によって保護されません。

権限についての詳細は、アプリ マニフェスト概要の権限のセクションと、セキュリティ ガイドラインをご覧ください。

android:process
サービスが実行されるプロセスの名前。通常、アプリ コンポーネントはすべて、そのアプリ用に作成されたデフォルト プロセス内で実行されます。このプロセスの名前はアプリ パッケージと同じです。<application> 要素の process 属性を使用すると、すべてのコンポーネントに対して異なるデフォルト値を設定できます。ただし、コンポーネントは、その process 属性でデフォルト値をオーバーライドできます。これにより、アプリを複数のプロセスに分散できます。

この属性に割り当てられた名前がコロン(「:」)で始まる場合、必要に応じてアプリ専用の新しいプロセスが作成され、そのプロセス内でサービスが実行されます。

プロセス名が小文字で始まる場合、サービスはその名前のグローバル プロセス内で実行されます(その権限がある場合)。これにより、異なるアプリのコンポーネント間で 1 つのプロセスを共有して、リソース使用量を削減できます。

android:stopWithTask
"true" に設定すると、ユーザーがアプリが所有するアクティビティにルートされているタスクを削除すると、システムはサービスを自動的に停止します。デフォルト値は "false" です。
関連項目:
<application>
<activity>
導入時の API レベル:
API レベル 1