Как сделать запрос ContactsContract.CommonDataKinds.Phone на Android?

1

Я пытаюсь создать список разговоров для SMS-сообщений. Поэтому я читаю "content://sms/conversations" и читаю первые несколько сообщений каждого разговора, чтобы найти номера телефонов партнеров связи. С этими числами я пытаюсь получить contact_id из ContactsContract.CommonDataKinds.Phone, чтобы получить остальную информацию о человеке из базы данных контактов.

String[] returnVals = new String[] {ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
Cursor pCur = thisContent.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            returnVals, 
            ContactsContract.CommonDataKinds.Phone.DATA1 + " = \"" + phoneNumber + "\"", 
            null, 
            null);

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

Итак, мои вопросы:

  • Это правильный подход? Я что-то упускаю? Есть ли более простой способ достичь этого?
  • Что я вернусь из ContactsContract.CommonDataKinds.Phone - это ссылка на _ID контакта с людьми. Я полагаю, что не могу справиться с этим как с длинным идентификатором _ID, но как мне это сделать?
  • Есть ли учебник по обработке SMS в Android, помимо документации SDK, с точки зрения окружающих задач, подобных этому?
Теги:
sms
phone-number

1 ответ

2
Лучший ответ

Вам следует взглянуть на рекомендуемый ContactsContract.PhoneLookup поставщик

Таблица, представляющая результат поиска номера телефона, например, для идентификатора вызывающего абонента. Чтобы выполнить поиск, вы должны добавить номер, который хотите найти, в CONTENT_FILTER_URI. Этот запрос сильно оптимизирован.

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
  • 0
    не могли бы вы привести полный пример

Ещё вопросы

Сообщество Overcoder
Наверх
Меню