Как найти имя контакта с номера телефона на Android?
Я пытаюсь получить имя отправителя из базы данных контактов с помощью поставщика контента.
Проблема в том, что я не знаю, как ее реализовать. Как сейчас, я могу только вытащить номер телефона из smsMessage. Мне нужно проверить, действительно ли номер телефона, который вызывается, в контактах пользователей, и если он отображает имя, если оно не отображает номер.
Ответы
Ответ 1
Да, это возможно с помощью ContactsContract.PhoneLookup.CONTENT_FILTER_URI
в Android 2.0 и выше и Contacts.Phones.CONTENT_FILTER_URL
в Android 1.6 и более ранних версиях.
Например, использование см. в документации для ContactsContract.PhoneLookup. Выдержка ниже:
// Android 1.6 and earlier (backwards compatible for Android 2.0+)
Uri uri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(phoneNumber));
// Android 2.0 and later
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
// Query the filter URI
String[] projection = new String[]{ PhoneLookup.DISPLAY_NAME, ...
Cursor cursor = context.getContentResolver().query(uri, projection, ...
ОБНОВЛЕНИЕ. Формат номера телефона не имеет значения. Сравнение является надежным и оптимизированным на Android; это было сделано с использованием встроенной функции sqlite с именем PHONE_NUMBERS_EQUAL
. Для более подробной информации выполните поиск кода для этого метода. Кстати, я не уверен, что безопасно использовать эту функцию непосредственно в ваших собственных приложениях, но я бы этого не сделал.
Ответ 2
Вот что я сделал
ContentResolver localContentResolver = this.mContext.getContentResolver();
Cursor contactLookupCursor =
localContentResolver.query(
Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(phoneNumber)),
new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID},
null,
null,
null);
try {
while(contactLookupCursor.moveToNext()){
String contactName = contactLookupCursor.getString(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
String contactId = contactLookupCursor.getString(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
Log.d(LOGTAG, "contactMatch name: " + contactName);
Log.d(LOGTAG, "contactMatch id: " + contactId);
}
} finally {
contactLookupCursor.close();
}
Передача вашего номера телефона, который у вас уже есть, в Uri.encode(номер телефона)