about 5 years ago

アドレス帳に登録済みの連絡先はContentProviderで取得できる

Uri

ContentProviderへ問い合わせを行う場合連絡先専用のURIが必要になるそれがContactsContract.Data.CONTENT_URI。

問い合わせ

ContentProviderへアクセスする場合Context.getContentResolver()でContentResolverのインスタンスを取得し、それを経由してContactsProvider(ContentProvider)へアクセスすることになる。

ContactsProviderに関する詳細は

http://developer.android.com/guide/topics/providers/contacts-provider.html

追加、検索、削除、更新はここのサンプルコードが役に立つ。

http://developer.android.com/reference/android/provider/ContactsContract.Data.html

例えば、連絡先を全て取得したいなら

        String[] projection = null;
        String selection = null;
        String[] selectionArgs = new String[] {};
        Cursor c = getContentResolver().query(
                ContactsContract.Data.CONTENT_URI, projection, selection,
                selectionArgs, null);

となる。この場合、MIMEタイプ別のデータも含むので人物が重複するようなデータが取得できる。

取得できる情報

  • 電話番号
  • メールアドレス
  • 会社名
  • 姓名
  • 姓名に対する振り仮名
  • 写真
  • 住所
  • 郵便番号

誕生日は機種によっては設定/取得可能だが、Android標準では非サポート。

http://stackoverflow.com/questions/8579883/get-birthday-for-each-contact-in-android-application

MIMEタイプ

連絡先データはMIMEタイプ別に管理されている。写真ならPhoto.CONTENT_ITEM_TYPE。組織ならOrganization.CONTENT_ITEM_TYPEである。それぞれ、DATA1~DATA15までの間のカラムを持つ。慣例的にDATA15はblob(バイナリ)を格納する

写真

MIMEタイプPhoto.CONTENT_ITEM_TYPEで、DATA15またはPHOTO_URIから取得できる。DATA15はblobのため、取得したらBitmapFactoryでBitmapを取り出せる。

← Pencil - 画面プロトタイプを作成する ExifInterface とジオタグ →