我正在尝试按显示名称查找联系人。目标是打开此联系人并向其中添加更多数据(特别是更多电话号码),但我什至很难找到我想要更新的联系人。
这是我正在使用的代码:
public static String findContact(Context context) {
ContentResolver contentResolver = context.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
}
我确实有一个名为“John Johnson”的联系人,但该方法始终返回“未找到”。我还尝试过搜索只有一个名字的联系人,所以这没有什么区别。
我怀疑 uri、选择或选择参数有问题,因为我找不到任何在线搜索具有给定显示名称的联系人的示例,并且显示名称似乎是一种特殊类型的信息,不同于例如一个电话号码。
我有什么想法可以找到约翰·约翰逊吗?
更新:我找到了如何通过显示名称查找联系人:
ContentResolver contentResolver = context.getContentResolver();
Uri uri = Data.CONTENT_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = StructuredName.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
此代码返回显示名称为“John Johnson”的第一个联系人的联系人 ID。在我的原始代码中,我的 uri 错误并且查询中的选择错误。