我正在使用以下代码:
int indexContactId = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
/*......*/
int id = Integer.parseInt(people.getString(indexContactId));
Cursor name_cursor = ctx.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + " = " + id, null, null);
String first_name = "";
String last_name = "";
while (name_cursor.moveToNext()) {
if (name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)) != null) {
first_name = name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
last_name = name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
}
}
name_cursor.close();
获取联系人的名字和姓氏(单独)。
除此之外,我还要检索DISPLAY_NAME
int indexName = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
问题在于,对于某些联系人,我得到的值如下:
Skype通话有什么用?我该如何检索正确的MILEN名称?或至少知道忽略这些,因为Franck MILEN也会以适当的名字返回。
修改
我需要的是更好的方式来获取用户的first_name
,last_name
和phone_number
(名字和姓氏应该是分开的)而不是获取或忽略Skype视频通话事项:)
答案 0 :(得分:0)
似乎我需要回答我自己的问题。这是我正在使用的代码,它似乎工作,它不再返回Skype联系人:
int id = Integer.parseInt(people.getString(indexContactId));
String[] projectionNames = new String[]{ContactsContract.Data.DATA2, ContactsContract.Data.DATA3};
String where = ContactsContract.Data.CONTACT_ID + " = " + id
+ " AND "
+ ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "'";
Uri uriNames = ContactsContract.Data.CONTENT_URI;
Cursor name_cursor = ctx.getContentResolver().query(uriNames, projectionNames, where, null, null);
String first_name = "";
String last_name = "";
while (name_cursor.moveToNext()) {
first_name = name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.Data.DATA2));
last_name = name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.Data.DATA3));
}
name_cursor.close();
name_cursor = null;