【发布时间】:2021-04-22 09:54:33
【问题描述】:
我正在尝试通过 ContentResolver 查询获取电话联系方式。我可以获取联系人,但无法检查联系人是否有姓名。
我的情况是当联系人没有名字时,我会放一个空字符串,但ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME返回它的号码而不是null。
这是我获取联系人的代码
Cursor managedCursor = activity.getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER},
"(" + ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE ? OR " + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " LIKE ?)"
, new String[]{"%" + keyword + "%", "%" + keyword + "%"}, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE");
String firstChar = "";
contacts.clear();
while (managedCursor != null && managedCursor.moveToNext()) {
String name = managedCursor.getString(managedCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = managedCursor.getString(managedCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// Cleanup the phone number
phoneNumber = phoneNumber.replaceAll("[()\\s-]+", "");
if (name.length() > 0) {
String first = name.charAt(0) + "";
if (!first.equalsIgnoreCase(firstChar)) {
firstChar = first + "";
contacts.add(new Contact(Contact.TYPE_HEADER, firstChar));
}
} else {
//when name length is 0 or name is null, I want to replace it with empty string
name = "";
contacts.add(new Contact(Contact.TYPE_HEADER, "#"));
}
Contact contact = new Contact(phoneNumber, name);
if (!contacts.contains(contact)) {
contacts.add(contact);
}
}
setupAdapter(contacts, keyword);
if(managedCursor != null){
managedCursor.close();
}
我之前将它替换为空字符串的方法是将它的 phoneNumber 与 name 进行比较。如果它们相同,我将其替换为空字符串。但是当无名联系人有多个号码时,它无法检测到。
有没有人知道如何检测联系人是否有名字?
谢谢
【问题讨论】:
标签: java android android-contacts