- 構文:
-
<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
引数にスキームまたはパスは含めず、オーソリティのみを含めてください。コンテンツ プロバイダの使用方法と開発方法については、コンテンツ プロバイダに関する API ガイドをご覧ください。
- 属性:
-
android:authorities
-
コンテンツ プロバイダによって提供されるデータを識別する 1 つ以上の URI オーソリティのリスト。複数のオーソリティがある場合は、名前をセミコロンで区切ったリストを指定します。競合を避けるため、オーソリティ名には Java スタイルの命名規則を使用してください(例:
com.example.provider.cartoonprovider
)。通常、これはプロバイダを実装する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
」です。権限を付与する方法により、権限によって保護されているデータに対する一回限りのアクセスをアプリ コンポーネントに許可できます。たとえば、メール メッセージに添付ファイルが含まれている場合、メールアプリは適切なビューアを呼び出して、(コンテンツ プロバイダのすべてのデータを閲覧できる一般的な権限をそのビューアが持っていなくても)添付ファイルを開くことができます。
このようなケースでは、コンポーネントをアクティブにするインテント オブジェクト内の
フラグとFLAG_GRANT_READ_URI_PERMISSION
フラグによって権限を付与できます。たとえば、上記のメールアプリの場合、FLAG_GRANT_WRITE_URI_PERMISSION
Context.startActivity()
に渡すインテント内にFLAG_GRANT_READ_URI_PERMISSION
を配置します。この権限は、インテント内の URI に固有の権限です。この属性を「
true
」に設定するか、または<grant-uri-permission>
サブ要素を定義することによって、この機能を有効にした場合、対象の URI がプロバイダから削除されたときに
を呼び出す必要があります。Context.revokeUriPermission()
<grant-uri-permission>
要素も参照してください。 android:icon
- コンテンツ プロバイダを表すアイコン。この属性は、画像の定義を含むドローアブル リソースへの参照として設定する必要があります。この属性を設定しなかった場合、アプリ自体に指定されているアイコンが代わりに使用されます(
<application>
要素のicon
属性を参照してください)。 android:initOrder
- コンテンツ プロバイダをインスタンス化する順序。これは、同じプロセスによってホストされる他のコンテンツ プロバイダの中での順序です。コンテンツ プロバイダ間に依存関係がある場合は、各プロバイダにこの属性を設定すると、その依存関係によって要求される順序でプロバイダのインスタンスが作成されます。値は単純な整数であり、数値の大きい順に初期化されます。
android:label
- 提供されるコンテンツのユーザー可読形式のラベル。この属性を設定しなかった場合、アプリ自体に設定されているラベルが代わりに使用されます(
<application>
要素のlabel
属性を参照してください)。ラベルは文字列リソースへの参照として設定する必要があります。そうすることで、ユーザー インターフェースの他の文字列と同じようにローカライズできるようになります。ただし、アプリの開発時は、簡便性を考慮して RAW 文字列として設定することもできます。
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
- 関連項目:
- コンテンツ プロバイダ
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2022-09-13 UTC。
[]
[]