liguofeng29’s blog

個人勉強用ブログだっす。

AndroidのContentProvider - ContentProviderの概要

ContentProviderはAndroidアプリの間でデータやり取りを行うために用意されてある標準APIである。

データ取得と提供

  • Androidアプリのデータ提供は、ContentProviderを利用し、Uri指定で提供する。
  • Androidアプリのデータ取得は、ContentResolverを利用し、Uri指定で取得する。

あるアプリがContentProviderを使って自分のデータを露出した場合、アプリが起動されてなくても他のアプリはContentResolverを使ってCRUD操作が可能である。

これはWebサービスと非常に似ている。 ContentProviderはAndroid内部のWebサービスであり、ContentResolverはAndroid内部のHttpClientである考えると理解が早いかも。

Uriの概要

  • content://org.sample.providers.dictprovider/words
    • content : AndroidのContentProvderに対するプロトコル
    • org.sample.providers.dictprovider : ContentProviderのauthorities。Androidシステムはこれを基にContentProviderを探す。
    • words : アクセスしたい資源。動的に指定しる。

Uriの例

  • content://org.sample.providers.dictprovider/word/2

    • wordデータ中のIDが2の記録
  • content://org.sample.providers.dictprovider/word/2/word

    • wordデータ中のIDが2の記録のwordという文字列
  • content://org.sample.providers.dictprovider/words

    • wordsデータすべて

Uriのパス

Uri uri = Uri.parse("content://org.sample.providers.dictprovider/words");

ContentProviderの開発

  1. ContentProviderのサブクラスの生成し、onCreate(),getType(),query(), insert(), update(), delete()などを実装する。
  2. AndroidManifest.xml中にContentProviderを登録し、android:authoritiesを指定する。

ContentResolverの開発

  1. ContextのgetContentResolver()でContentResolverオブジェクトを取得する。
  2. ContentResolverオブジェクトのquery(),insert(),update(),delete()を使う。

サンプルコード

UriMatcher : Uriパラメータが操作するデータを確定するクラス

  1. void addURI(String authority, String path, int code)
  2. int match(Uri uri)

ContentUris : Uri文字列操作ユーティリティ

  1. withAppendedld(uri, id)
  2. parseId(Uri)

ContentProviderほかの機能

  • システムContentProviderを操作する(連絡先、メディアなど) サンプルコード
  • ContentProviderリスナー(ContentObserverを利用してデータ変更を監視する)