联系人姓名检索返回"Skype video call"



我使用以下代码:

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);

问题是,对于一些联系人,我得到的值如下:

  • DISPLAY_NAME:弗兰克·米兰
  • 家族名称:0
  • GIVEN_NAME:Skype视频呼叫

Skype通话怎么回事?我该如何检索正确的MILEN名称?或者至少要知道忽略这些,因为弗兰克·米伦也会以正确的名字返回。

编辑

我需要的是一种更好的方法来获取用户的first_namelast_namephone_number(名字和姓氏应该分开),而不是获取或忽略Skype视频通话内容:)

似乎我需要回答自己的问题。这是我正在使用的代码,它似乎有效,不再返回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;

最新更新