<provider>

構文:
<provider android:authorities="list"
          android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string" >
    ...
</provider>
上位の要素:
<application>
含めることのできる要素:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
説明:
コンテンツ プロバイダ コンポーネントを宣言します。コンテンツ プロバイダは、アプリが管理するデータに対する構造化アクセスを提供する ContentProvider のサブクラスです。アプリ内のすべてのコンテンツ プロバイダは、マニフェスト ファイル内の <provider> 要素で定義する必要があります。定義していない場合、システムが認識できず、実行されません。

対象アプリの一部であるコンテンツ プロバイダのみを宣言します。対象アプリ内で使用していても、他のアプリの一部であるコンテンツ プロバイダは宣言しないでください。

Android システムは、コンテンツ プロバイダのコンテンツ URI の一部であるオーソリティ文字列に基づいて、コンテンツ プロバイダへの参照を保存します。たとえば、医療専門家に関する情報を格納するコンテンツ プロバイダにアクセスするとします。これを行うには、ContentResolver.query() メソッドを呼び出します。このメソッドは、他の引数と一緒に、プロバイダを識別する URI を受け取ります。

content://com.example.project.healthcareprovider/nurses/rn

この URI は、content: スキームにより、Android コンテンツ プロバイダを指すコンテンツ URI として識別されます。プロバイダ自体は com.example.project.healthcareprovider オーソリティによって識別されます。Android システムは、既知のプロバイダとそのオーソリティのリストから、対象のオーソリティを検索します。部分文字列 nurses/rn は、コンテンツ プロバイダがプロバイダ データのサブセットを識別するために使用するパスです。

<provider> 要素でプロバイダを定義する場合、android:name 引数にスキームまたはパスは含めず、オーソリティのみを含めます。

コンテンツ プロバイダの使用方法と開発方法については、コンテンツ プロバイダをご覧ください。

属性:
android:authorities
コンテンツ プロバイダによって提供されるデータを識別する 1 つ以上の URI オーソリティのリスト。 複数のオーソリティがある場合は、名前をセミコロンで区切ったリストを指定します。 競合を避けるには、オーソリティ名に com.example.provider.cartoonprovider などの Java スタイルの命名規則を使用します。通常、これはプロバイダを実装する ContentProvider サブクラスの名前です。

デフォルト値はありません。少なくとも 1 つのオーソリティを指定する必要があります。

android:enabled
システムがコンテンツ プロバイダをインスタンス化できるかどうかを指定します。できる場合は "true"、できない場合は "false" です。デフォルト値は "true" です。

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

android:directBootAware

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

注: ダイレクト ブート中、アプリ内のコンテンツ プロバイダがアクセスできるデータは、デバイス保護ストレージ内に保存されているデータに限定されます。

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

android:exported
他のアプリがコンテンツ プロバイダを使用できるかどうかを指定します。
  • "true": 他のアプリがプロバイダを使用できます。どのようなアプリでも、プロバイダに指定されている権限に従い、プロバイダのコンテンツ URI を使用してプロバイダにアクセスできます。
  • "false": 他のアプリはプロバイダを使用できません。android:exported="false" を設定すると、プロバイダへのアクセスが対象アプリに限定されます。プロバイダにアクセスできるアプリは、プロバイダと同じユーザー ID(UID)を持つアプリか、android:grantUriPermissions 要素によって一時的にプロバイダへのアクセス権を付与されたアプリに限定されます。

この属性は API レベル 17 で導入されたため、API レベル 16 以下を搭載しているすべてのデバイスは、この属性が "true" に設定されている場合と同様に動作します。android:targetSdkVersion を 17 以上に設定した場合、API レベル 17 以上を搭載しているデバイスでは、デフォルト値が "false" になります。

android:exported="false" を設定する方法のほか、permission 属性で権限を設定する方法でも、プロバイダへのアクセスを制限できます。

android:grantUriPermissions
通常であればコンテンツ プロバイダのデータにアクセスする権限を持たないユーザーに対して、そのような権限を付与できるかどうかを指定します。付与した場合、readPermission 属性、writePermission 属性、permission 属性、exported 属性によって課される制限が一時的に解除されます。

権限を付与できる場合は "true"、そうでない場合は "false" に設定します。"true" に設定した場合、コンテンツ プロバイダの任意のデータに対して権限を付与できます。"false" に設定した場合、<grant-uri-permission> サブ要素内にリストされるデータ サブセット(存在する場合)に対してのみ権限を付与できます。デフォルト値は "false" です。

権限を付与する方法により、権限によって保護されているデータに対する一回限りのアクセスをアプリ コンポーネントに許可できます。たとえば、メール メッセージに添付ファイルが含まれている場合、メールアプリは適切なビューアを呼び出して、(コンテンツ プロバイダのすべてのデータを閲覧できる一般的な権限をそのビューアが持っていなくても)添付ファイルを開くことができます。

このようなケースでは、コンポーネントをアクティブにする Intent オブジェクト内の FLAG_GRANT_READ_URI_PERMISSION フラグと FLAG_GRANT_WRITE_URI_PERMISSION フラグによって権限を付与できます。たとえば、上記のメールアプリの場合、Context.startActivity() に渡す Intent 内に FLAG_GRANT_READ_URI_PERMISSION を配置します。この権限は、Intent 内の URI に固有の権限です。

この属性を "true" に設定するか、または <grant-uri-permission> サブ要素を定義することによって、この機能を有効にした場合、対象の URI がプロバイダから削除されたときに Context.revokeUriPermission() を呼び出す必要があります。

<grant-uri-permission> 要素も参照してください。

android:icon
コンテンツ プロバイダを表すアイコン。 この属性は、画像の定義を含むドローアブル リソースへの参照として設定されます。この属性を設定しなかった場合、アプリ用に指定されているアイコンが代わりに使用されます。詳細については、<application> 要素の icon 属性をご覧ください。
android:initOrder
コンテンツ プロバイダをインスタンス化する順序。これは、同じプロセスによってホストされる他のコンテンツ プロバイダの中での順序です。 コンテンツ プロバイダ間に依存関係がある場合は、各プロバイダにこの属性を設定すると、その依存関係によって要求される順序でプロバイダのインスタンスが作成されます。値は整数で、数値の大きい順に初期化されます。
android:label
提供されるコンテンツのユーザー可読形式のラベル。この属性を設定しなかった場合、アプリ用に設定されているラベルが代わりに使用されます。詳細については、<application> 要素の label 属性をご覧ください。

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

android:multiprocess
アプリが複数のプロセスで実行される場合、この属性によって、コンテンツ プロバイダのインスタンスが複数作成されるかどうかが決まります。"true" に設定した場合、アプリの各プロセスに対して、それぞれ固有のコンテンツ プロバイダ オブジェクトが作成されます。"false" に設定した場合、アプリのプロセスは 1 つのコンテンツ プロバイダ オブジェクトのみを共有します。デフォルト値は "false" です。

このフラグを "true" に設定すると、プロセス間通信のオーバーヘッドが削減し、パフォーマンスが向上する場合があります。ただし、各プロセスのメモリ フットプリントは増加します。

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

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

android:permission
コンテンツ プロバイダのデータを読み書きする際にクライアントが必要とする権限の名前。この属性は、1 つの権限で読み取りと書き込みの両方を設定する際に便利です。ただし、readPermission 属性、writePermission 属性、grantUriPermissions 属性の方が、この属性よりも優先されます。

readPermission 属性も設定した場合、この属性により、コンテンツ プロバイダに対してクエリを行うためのアクセスが制御されます。 writePermission 属性を設定した場合、この属性により、プロバイダのデータを変更するためのアクセスが制御されます。

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

android:process
コンテンツ プロバイダが実行されるプロセスの名前。通常、すべてのアプリ コンポーネントは、そのアプリのために作成されるデフォルト プロセス内で実行されます。このプロセスの名前はアプリ パッケージと同じです。

<application> 要素の process 属性を使用すると、すべてのコンポーネントに対して異なるデフォルト値を設定できます。ただし、各コンポーネントは、それぞれの process 属性でデフォルト値をオーバーライドできます。これにより、アプリを複数のプロセスに分散できます。

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

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

android:readPermission

コンテンツ プロバイダに対してクエリを行う際にクライアントが必要とする権限。

プロバイダが android:grantUriPermissions"true" に設定している場合、または特定のクライアントが <grant-uri-permission> サブ要素の条件を満たしている場合、クライアントは、コンテンツ プロバイダのデータに対する一時的な読み取りアクセス権を取得できます。

permission 属性と writePermission 属性も参照してください。

android:syncable
コンテンツ プロバイダの管理下にあるデータを、サーバー上のデータと同期できるかどうかを指定します。できる場合は "true"、できない場合は "false" です。
android:writePermission

コンテンツ プロバイダが管理しているデータに変更を加える際にクライアントが必要とする権限。

プロバイダが android:grantUriPermissions"true" に設定している場合、または特定のクライアントが <grant-uri-permission> サブ要素の条件を満たしている場合、クライアントは、コンテンツ プロバイダのデータに変更を加える一時的な書き込みアクセス権を取得できます。

permission 属性と readPermission 属性も参照してください。

導入時の API レベル:
API レベル 1
関連項目:
コンテンツ プロバイダ