- 構文:
-
<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>
<path-permission>
- 説明:
- コンテンツ プロバイダ コンポーネントを宣言します。コンテンツ プロバイダは、アプリが管理するデータに対する構造化アクセスを提供する
ContentProvider
のサブクラスです。アプリ内のコンテンツ プロバイダはすべて、マニフェスト ファイル内の<provider>
要素で定義する必要があります。定義していない場合、システムが認識できず、実行されません。対象アプリの一部を構成するコンテンツ プロバイダだけを宣言します。対象アプリ内で使用するものであっても、他のアプリ内のコンテンツ プロバイダは宣言しないでください。
Android システムは、コンテンツ プロバイダのコンテンツ URI の一部である認証局文字列に基づいて、コンテンツ プロバイダへの参照を保存します。たとえば、医療専門家に関する情報を格納しているコンテンツ プロバイダにアクセスするとします。これを行うには、
ContentResolver.query()
メソッドを呼び出します。このメソッドは、さまざまな引数の中で、プロバイダを識別する URI を受け取ります。content://com.example.project.healthcareprovider/nurses/rn
content:
スキーマが、この URI のことを、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
」です。パーミッションを付与することで、通常はパーミッションによって保護されているデータに対する 1 回限りのアクセスをアプリ コンポーネントに付与できます。たとえば、メールに添付ファイルが含まれていた場合、そのファイルに対応するビューアが、コンテンツ プロバイダのすべてのデータを閲覧できる汎用パーミッションを持っていなくても、メールアプリはそのビューアを呼び出して添付ファイルを開くことができます。
このような場合、コンポーネントをアクティブにするインテント オブジェクト内の
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
- 関連項目:
- コンテンツ プロバイダ
Content and code samples on this page are subject to the licenses described in the Content License. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2019-12-27 UTC.