получить имя контакта из контактов в Android

#android #contacts

#Android #Контакты

Вопрос:

У меня возникла проблема с получением имени контакта из контактов. Я создаю приложение для отправки SMS, и, как вы знаете, когда вы получаете SMS, номер, который вы получаете, приходит с кодом страны, но если тот же номер, который вы сохранили в своей памяти, без кода страны, как бы вы его нашли?

Я могу получить номер, если он сохранен с кодом страны, но не могу, если он сохранен без кода страны.

Вот мой код:

 String[] projection = new String[] {
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER };

    // encode the phone number and build the filter URI
    Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number));

    // query time
    Cursor c = getContentResolver().query(contactUri, projection, null,
            null, null);

    // if the query returns 1 or more results
    // return the first result
    if (c.moveToFirst()) {
        String name = c.getString(c
                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        return name;
    }

    // return the original number if no match was found
    return number;
  

Ответ №1:

Вы должны попробовать использовать SQLite LIKE в своем выборе. Я не тестировал это, но вы поймете идею. Метод принимает номер (адрес) из SMS и пытается сопоставить его с номером с телефона.НОМЕР.

   private void whateverYouCallMe(String numberWithCode) {

  String[] projection = new String[] {
        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Phone.NUMBER };

  String selection = Phone.NUMBER   " LIKE '%?%'" // numberWithCode should supplement the ? 
  final String[] SELECTION_ARGS = { numberWithCode };

  Cursor c = getContentResolver().query(contactUri, projection, selection, SELECTION_ARGS, null);

  //etc
  }
  

Комментарии:

1. я пробовал это, но все еще безрезультатно. должен ли я использовать запрос с помощью или opertaor. запрашивать номер с кодом и без кода?..

2. черт, я забыл добавить аргументы выбора. Добавлено сейчас

3. Теперь у меня сбой из-за этого аргумента выбора. вы не указали оператор ContactURI. я добавил этот Uri contactUri = Uri.С добавленным путем (ContactsContract. Общие ссылки. Телефон. CONTENT_FILTER_URI, Uri.encode(номер)); и я получаю ошибку: привязка или индекс столбца вне диапазона.

4. Я думаю, вам нужно использовать ContactsContract. Общие ссылки. Телефон. CONTENT_URI

5. получил рабочий ответ, изменив строку на «НРАВИТСЯ?» вместо «НРАВИТСЯ’%?%'»