コンテンツ プロバイダ

コンテンツ プロバイダは、アプリ自体が保存するデータまたは他のアプリによって保存されたデータへのアクセスをアプリ側で管理し、他のアプリとデータを共有する方法を提供します。これらはデータをカプセル化し、データ セキュリティを定義するメカニズムを提供します。コンテンツ プロバイダは、あるプロセス内のデータと別のプロセスで実行されているコードを接続するための標準的なインターフェースです。

コンテンツ プロバイダを実装すると、多くの利点があります。最も重要な点は、図 1 に示すように、他のアプリが安全にアプリデータにアクセスして変更できるように、コンテンツ プロバイダを構成できることです。

コンテンツ プロバイダがストレージへのアクセスを管理する方法を示す概要図。

図 1. コンテンツ プロバイダがストレージへのアクセスを管理する方法を示す概要図。

データを共有する予定がある場合は、コンテンツ プロバイダを使用してください。データを共有する予定がない場合は、使用する必要はありません。ただし、抽象化により、データへのアクセスに依存する他のアプリに影響を与えずに、アプリのデータ ストレージの実装を変更できるという利点もあります。

このシナリオでは、コンテンツ プロバイダのみが影響を受け、コンテンツ プロバイダにアクセスするアプリは影響を受けません。たとえば、図 2 に示すように、SQLite データベースを代替ストレージと交換できます。

コンテンツ プロバイダ ストレージの移行のイラスト。

図 2. コンテンツ プロバイダ ストレージの移行のイラスト。

他の多くのクラスは ContentProvider クラスに依存しています。

これらのクラスのいずれかを使用する場合は、アプリにコンテンツ プロバイダを実装する必要があります。同期アダプター フレームワークを使用する場合は、代わりにスタブ コンテンツ プロバイダを作成することもできます。詳細については、スタブ コンテンツ プロバイダを作成するをご覧ください。また、次のような場合は、独自のコンテンツ プロバイダが必要になります。

  • カスタム検索候補をアプリに実装するため。
  • アプリデータをウィジェットに公開するため
  • アプリケーションから複雑なデータやファイルをコピーして別のアプリケーションに貼り付ける場合。

Android フレームワークには、音声、動画、画像、個人の連絡先情報などのデータを管理するコンテンツ プロバイダが含まれています。その一部は、android.provider パッケージのリファレンス ドキュメントに記載されています。一定の制限のもと、これらのプロバイダはすべての Android アプリからアクセスできます。

コンテンツ プロバイダを使用すると、SQLite リレーショナル データベースなどの構造化データや、画像ファイルなどの非構造化データの両方を含む、さまざまなデータ ストレージ ソースへのアクセスを管理できます。Android で利用可能なストレージのタイプの詳細については、データ ストレージとファイル ストレージの概要および データ ストレージを設計するをご覧ください。

コンテンツ プロバイダのメリット

コンテンツ プロバイダは、データへのアクセス権限をきめ細かく制御できます。アクセスをアプリ内のコンテンツ プロバイダのみに制限すること、他のアプリのデータにアクセスするための包括的な権限を付与すること、データの読み取りと書き込みに異なる権限を設定することを選択できます。コンテンツ プロバイダを安全に使用する方法については、 データ ストレージのセキュリティに関するヒント コンテンツ プロバイダの権限をご覧ください。

コンテンツ プロバイダを使用すると、アプリ内のさまざまなデータソースへのアクセスに関する詳細を抽象化できます。たとえば、アプリは構造化レコードを SQLite データベースに保存するだけでなく、動画ファイルや音声ファイルにも格納します。コンテンツ プロバイダを使用して、このようなデータのすべてにアクセスできます。

また、CursorLoader オブジェクトはコンテンツ プロバイダを利用して非同期クエリを実行し、その結果をアプリの UI レイヤに返します。CursorLoader を使用してバックグラウンドでデータを読み込む方法について詳しくは、 ローダをご覧ください。

以下のトピックでは、コンテンツ プロバイダについて詳しく説明します。

コンテンツ プロバイダの基本
既存のコンテンツ プロバイダを使用してデータにアクセスし、更新する方法。
コンテンツ プロバイダを作成する
独自のコンテンツ プロバイダを設計して実装する方法。
カレンダー プロバイダの概要
Android プラットフォームの一部であるカレンダー プロバイダにアクセスする方法。
連絡先プロバイダ
Android プラットフォームの一部である連絡先プロバイダにアクセスする方法。