【发布时间】:2017-02-12 21:14:08
【问题描述】:
我正在使用以下代码:
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:弗兰克·米伦
- FAMILY_NAME:0
- GIVEN_NAME:Skype 视频 打电话
Skype 通话是怎么回事?以及如何检索正确的 MILEN 名称?或者至少知道忽略这些,因为 Franck MILEN 也返回了专有名称。
编辑
我需要的是一种更好的方法来获取用户的first_name、last_name 和phone_number(名字和姓氏应该分开),而不是获取或忽略 Skype 视频通话的事情 :)
【问题讨论】:
-
你想达到什么目的?获取手机上所有联系人的显示名称?
-
是的,还有电话号码。但我需要将名称分开,所以我将它们设置在带有粘性标题的列表中(标题是首字母)。我遇到的问题是我在列表中显示 DISPLAY_NAME ,但使用 GIVEN_NAME 的第一个字母作为标题的首字母。它在“S”下显示“Franck MILEN”:)
-
总之需要每个联系人的display_name、given_name、phone_number?
-
我需要 first_name、last_name、phone_number ... 并阻止它显示 Skype 内容 :)
标签: android