電話帳、Contact ContentResolver 使い方サンプル

電話帳、Contact の情報は、ContentResolverで読む。

Android 端末 使用中SIMの登録したGoogle アカウント上の Contact 情報、まで読込む場合、

ContactsContract.CommonDataKinds.Email.CONTENT_URI を使う。

public void scan(Context context){
   Uri uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
   uri = uri.buildUpon().appendQueryParameter("address_book_index_extras", "true").build();// これは使うべきではない!!非公開のoption
   String projection = { ContactsContract.Data.CONTACT_ID
      , Contacts.DISPLAY_NAME
      , ContactsContract.RawContacts.PHONETIC_NAME
      , ContactsContract.CommonDataKinds.Email.DATA1
      , ContactsContract.CommonDataKinds.Phone.NUMBER
      , ContactsContract.RawContacts.STARRED
   };
   String selection = ContactsContract.Data.MIMETYPE  + " =? OR " + ContactsContract.Data.MIMETYPE + " =?";
   String
 selectionArgs = { "vnd.android.cursor.item/name", "vnd.android.cursor.item/email_v2" };
   String sortOrder = Contacts.SORT_KEY_PRIMARY + " ASC";
   Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
   if (cursor.moveToFirst()){
      int contactId_Index = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
      int diplayName_Index = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
      int email_Index = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA1);
      int starred_Index = cursor.getColumnIndex(ContactsContract.RawContacts.STARRED);
      do{
         int contactId = cursor.getInt(contactId_Index);
         String diplayName = cursor.getString(diplayName_Index);
         String email = cursor.getString(email_Index);
         boolean starred = cursor.getInt(starred_Index) == 1;

      }while(cursor.moveToNext());
   }
   cursor.close();
}

端末の電話帳は、、 ContactsContract.CommonDataKinds.Phone.CONTENT_URI を使う、

   Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
   uri = uri.buildUpon().appendQueryParameter("address_book_index_extras", "true").build();
   String projection = { ContactsContract.Data.CONTACT_ID
      , Contacts.DISPLAY_NAME
      , ContactsContract.RawContacts.PHONETIC_NAME
      , ContactsContract.CommonDataKinds.Phone.NUMBER
      , ContactsContract.RawContacts.STARRED
   };
   String selection = ContactsContract.Data.MIMETYPE  + " =? OR " + ContactsContract.Data.MIMETYPE + " =?";
   String
 selectionArgs = { "vnd.android.cursor.item/name", "vnd.android.cursor.item/phone_v2" };
    String sortOrder = Contacts.SORT_KEY_PRIMARY + " ASC";
   Cursor cursor.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
   if (cursor.moveToFirst()){
      int contactId_Index = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
      int diplayName_Index = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
      int phoneticName_Index = cursor.getColumnIndex(ContactsContract.RawContacts.PHONETIC_NAME);
      int phone_Index = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
      int starred_Index = cursor.getColumnIndex(ContactsContract.RawContacts.STARRED);
      do{
         int contactId = cursor.getInt(contactId_Index);
         String diplayName = cursor.getString(diplayName_Index);
         String phoneticName = cursor.getString(phoneticName_Index);
         String phone = cursor.getString(phone_Index);
         boolean starred = cursor.getInt(starred_Index) == 1;


      }while(cursor.moveToNext());
   }
   cursor.close();