У меня есть следующий код.
int phoneContactID = new Random().nextInt();
Cursor contactLookupCursor = context.getContentResolver().query( Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(contactNumber)), new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID},null,null,null);
try
{
contactLookupCursor.moveToFirst();
while(contactLookupCursor.moveToNext())
{
phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
}
}
finally
{
contactLookupCursor.close();
}
Проблема в приведенном выше коде состоит в том, что даже если я даю существующее число в контактах эмулятора, оно не возвращает никаких результатов. Я тестировал его час назад, и он работал нормально, и теперь, когда я тестировал его снова, он ничего не возвращал. Я не уверен, если что-то не так с кодом. То, что я пытаюсь сделать, это получить идентификатор, который соответствует одному с несколькими номерами. Например, скажем, есть имя контакта под названием «А» и А имеет два числа. По сути, идентификатор контакта для A должен быть 1 независимо от того, на какой номер я ссылаюсь. Правильно ли мое предположение?
ОБНОВЛЕНИЕ: я сделал еще несколько тестов. Скажем, если номер хранится без кода страны в базе данных контактов, как 222-222-2222. Поиск с использованием приведенного ниже кода возвращает идентификатор контакта только тогда, когда я передаю 2222222222 или 222-222-2222. И если тот же номер хранится как 12222222222, действительный идентификатор контакта получен, только если я ищу номер 12222222222.
String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone._ID,ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(contactNumber));
Cursor c = context.getContentResolver().query(contactUri, projection, null, null, null);
if (c.moveToFirst()) {
phoneContactID = c.getInt(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
}
Я не уверен, что делаю что-то не так здесь. Любая помощь будет оценена.