コンテンツ プロバイダは、アプリが、そのアプリ自体が保存したデータや、他のアプリが保存したデータへのアクセスを管理するのに役立ち、他のアプリとデータを共有する方法を提供します。また、データをカプセル化し、データ セキュリティの定義のためのメカニズムを提供します。コンテンツ プロバイダは、1 つのプロセス内のデータを別のプロセスで実行されているコードにつなげるための標準的なインターフェースです。コンテンツ プロバイダを実装すると、多くのメリットが得られます。最も重要なのは、図 1 に示すように、他のアプリが自分のアプリデータに安全にアクセスして変更できるようにコンテンツ プロバイダを設定できることです。

図 1. コンテンツ プロバイダがストレージへのアクセスを管理する方法を示す概要図
データを共有する場合は、コンテンツ プロバイダを使用してください。データを共有しない場合でも、コンテンツ プロバイダを使用すると抽象化に役立ちますが、使用しなくてもかまいません。この抽象化により、データへのアクセスに依存する他の既存のアプリに影響を与えることなく、アプリのデータ ストレージの実装に変更を加えることができます。このシナリオでは、コンテンツ プロバイダのみが影響を受け、コンテンツ プロバイダにアクセスするアプリは影響を受けません。たとえば、図 2 に示すように、SQLite データベースを代替ストレージに置き換えることができます。

図 2. コンテンツ プロバイダのストレージの移行を示す図
ContentProvider
クラスを使用するその他のクラスは次のとおりです。
これらのクラスのいずれかを使用する場合は、アプリにコンテンツ プロバイダも実装する必要があります。同期アダプタ フレームワークを使用する場合は、代わりにスタブ コンテンツ プロバイダを作成することもできます。このトピックの詳細については、スタブ コンテンツ プロバイダの作成をご覧ください。また、次の場合には独自のコンテンツ プロバイダが必要です。
- アプリにカスタムの検索候補を実装する
- コンテンツ プロバイダを使用してアプリ データをウィジェットに公開する
- 自分のアプリから別のアプリに複雑なデータやファイルをコピーして貼り付ける
Android フレームワークには、オーディオ、ビデオ、画像、個人的な連絡先情報などのデータを管理するコンテンツ プロバイダが用意されています。一部のプロバイダについては、android.provider
パッケージのリファレンスに一覧が記載されています。いくつかの制限もありますが、これらのプロバイダにはすべての Android アプリからアクセスできます。
コンテンツ プロバイダを使用すると、SQLite リレーショナル データベースなどの構造化データや、画像ファイルなどの非構造化データを含む、さまざまなデータ ストレージ ソースへのアクセスを管理できます。Android で利用可能なストレージの種類の詳細については、ストレージ オプションとデータ ストレージの設計をご覧ください。
コンテンツ プロバイダのメリット
コンテンツ プロバイダは、データにアクセスするためのパーミッションを細かく制御できます。自分のアプリからのみコンテンツ プロバイダにアクセスするよう制限したり、他のアプリからデータにアクセスするための包括的なパーミッションを付与したり、データの読み取りと書き込みに異なるパーミッションを設定したりできます。コンテンツ プロバイダを安全に使用する方法の詳細については、データを保存するためのセキュリティに関するヒントとコンテンツ プロバイダ パーミッションをご覧ください。
コンテンツ プロバイダを使用すると、アプリ内のさまざまなデータソースにアクセスするための詳細を抽象化できます。たとえば、アプリは、ビデオファイルやオーディオ ファイルの他に、SQLite データベースに構造化レコードを保存することがあります。アプリにこの開発パターンを実装すると、コンテンツ プロバイダを使用してこのデータすべてにアクセスできます。
また、CursorLoader
オブジェクトはコンテンツ プロバイダを使用して非同期クエリを実行し、その結果をアプリの UI レイヤーに返します。CursorLoader を使用してバックグラウンドでデータを読み込む方法の詳細については、CursorLoader でのクエリの実行をご覧ください。
コンテンツ プロバイダの詳細は、次のトピックをご覧ください。
- コンテンツ プロバイダの基本
- 既存のコンテンツ プロバイダを使用してデータにアクセスして更新する方法。
- コンテンツ プロバイダの作成
- 独自のコンテンツ プロバイダを設計して実装する方法。
- カレンダー プロバイダ
- Android プラットフォームの一部であるカレンダー プロバイダへのアクセス方法。
- 連絡先プロバイダ
- Android プラットフォームの一部である連絡先プロバイダへのアクセス方法。
このページに関連するサンプルコードについては、基本の同期アダプタのサンプル アプリをご覧ください。