未加工の連絡先とそれに関連するすべてのデータを読み取る最良の方法は、ContactsContract.RawContacts.Entity
ディレクトリを使用することです。生の連絡先にデータ行がある場合、エンティティカーソルには各データ行の行が含まれます。生の連絡先にデータ行がない場合でも、カーソルには生の連絡先レベルの情報を含む1つの行が含まれます。
Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY);
Cursor c = getContentResolver().query(entityUri,
new String[]{RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1},
null, null, null);
try {
while (c.moveToNext()) {
String sourceId = c.getString(0);
if (!c.isNull(1)) {
String mimeType = c.getString(2);
String data = c.getString(3);
//decide here based on mimeType, see comment later
}
}
} finally {
c.close();
}
mimeTypeに基づいて結果をフィルタリングする必要があります
たとえば、mimeTypeがPhone.CONTENT_ITEM_TYPE
、の場合、列DATA1
には電話番号が格納されますが、データの種類がEmail.CONTENT_ITEM_TYPE
、の場合DATA1
、電子メールアドレスが格納されます。
HAS_PHONE_NUMBER
この方法では、アイテムを直接反復処理するため、使用する必要はありません。