Я пытаюсь создать список разговоров для 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.PhoneLookup поставщик
Таблица, представляющая результат поиска номера телефона, например, для идентификатора вызывающего абонента. Чтобы выполнить поиск, вы должны добавить номер, который хотите найти, в CONTENT_FILTER_URI. Этот запрос сильно оптимизирован.
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...