Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

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

permission 属性と writePermission 属性もご覧ください。

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

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

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

permission 属性と readPermission 属性もご覧ください。

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