くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

【Android】コンテンツ プロバイダ(ContactsProvider)を使って連絡先から誕生日と名前を取得する

Androidの開発をしていて、連絡先から誕生日を取得して、ごにょごにょする必要があったので、その際の備忘録。
コンテンツプロバイダ関連って余り情報がないので、こまった。。

連絡先を扱うには、パーミッションが必要です

今回は読み込みだけなので、以下をAndroidManifest.xmlに追加

<uses-permission android:name="android.permission.READ_CONTACTS"/>

検索・取得のはこんな感じ

//取得するカラムをは、名前とIDと誕生日
String[] projection = new String[]{
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Event.CONTACT_ID,
        ContactsContract.CommonDataKinds.Event.START_DATE
};
// 検索条件で、Event.TYPEがTYPE_BIRTHDAYのみに絞り込む
String selection =
        ContactsContract.Data.MIMETYPE + "= ? AND " +
                ContactsContract.CommonDataKinds.Event.TYPE + "=" +
                ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
String[] selectionArgs = new String[]{
        ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE
};
// ソートの指定はなし
String sortOrder = null;

Cursor cursor = context.getContentResolver().query(
        ContactsContract.Data.CONTENT_URI,
        projection,
        selection,
        selectionArgs,
        sortOrder);

// あとは、whileで結果を取得
while (cursor.moveToNext()) {
    int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    String name = cursor.getString(nameIndex);

    int birthIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE);
    String birthDay = cursor.getString(birthIndex);
}

以上!!

参考にしたサイト様