读取原始联系人以及与之关联的所有数据的最佳方法是使用ContactsContract.RawContacts.Entity
目录。如果原始联系人有数据行,实体游标将为每个数据行包含一行。如果原始联系人没有数据行,则游标仍将包含一行包含原始联系人级别信息。
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
,因为您将直接遍历这些项目。