Я пытаюсь найти контакт по отображаемому имени. Цель состоит в том, чтобы открыть этот контакт и добавить к нему больше данных (в частности, больше телефонных номеров), но я изо всех сил пытаюсь даже найти контакт, который хочу обновить.
Это код, который я использую:
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";
}
У меня есть контакт по имени «Джон Джонсон», но метод всегда возвращает «не найден». Я также пытался найти контакт только с одним именем, так что это не имеет значения.
Я подозреваю, что что-то не так с 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";
Этот код возвращает идентификатор первого контакта с отображаемым именем «Джон Джонсон». В моем исходном коде у меня был неправильный uri и неправильный выбор в моем запросе.