Как сделать запрос ContactsContract.CommonDataKinds.Phone на Android? - PullRequest
1 голос
/ 15 августа 2010

Я пытаюсь создать список разговоров для SMS-сообщений.Поэтому я читаю «content: // смс / разговоры» и читаю первые несколько сообщений каждого разговора, чтобы найти номера телефонов партнеров по общению.С помощью этих номеров я пытаюсь получить 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);

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

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

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

1 Ответ

2 голосов
/ 15 августа 2010

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

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

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
...