Как найти имя контакта по номеру телефона на Android? - PullRequest
16 голосов
/ 01 февраля 2010

Я пытаюсь получить имя отправителя из базы данных контактов с помощью поставщика контента.

Проблема в том, что я не знаю, как это реализовать. Как и сейчас, я могу только вытащить номер телефона из сообщения smsMessage. Мне нужно проверить, есть ли номер вызывающего телефона в контактах пользователей в первую очередь и отображать ли имя, если нет, затем отображать номер.

Ответы [ 2 ]

24 голосов
/ 01 февраля 2010

Да, это возможно при использовании 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. Для получения более подробной информации найдите кодовую базу для этого метода . Кстати, я не уверен, безопасно ли использовать эту функцию непосредственно в ваших собственных приложениях, но я бы не стал.

19 голосов
/ 20 апреля 2011

Вот что я сделал

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 (номер телефона)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...