В одном из приложений возник вопрос о поиске контакта по номеру телефона (при получении СМС).
Задача оказалась не такой простой — в базе контактов номера телефонов часто записаны в произвольном (удобном) формате: здесь вместо кода страны используется цифра 8, а для разделения — скобки и/или пробелы.
части числа.
А дальше оператор добавил свою фантазию и преобразовал номер автора СМС в более читаемый формат — код страны, код оператора и сам номер телефона разделяются пробелами.
Функция приведения номеров в международный формат была выполнена не добросовестно и заняла слишком много времени.
Поиск ответа в документации также не дал особых результатов, но помогло изучение исходника.
Оказалось, что в запросах SQLite можно использовать функцию PHONE_NUMBERS_EQUAL(NUMBER1, NUMBER2, STRICT).
Третий параметр можно опустить.
Этот метод отлично работает.
Сам исходный номер желательно перед поиском привести к более простому виду:String[] projection = new String[] { ContactsContract.Data.CONTACT_ID, ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.STARRED, ContactsContract.Contacts.CONTACT_STATUS, ContactsContract.Contacts.CONTACT_PRESENCE }; String selection = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'"; String selectionArgs = new String[] { phoneNumber }; Cursor cursor = getContentResolver().
query(ContactsContract.Data.CONTENT_URI, projection, selection, selectionArgs, null);
String phoneNumber = PhoneNumberUtils.stripSeparators(sourcePhoneNumber);
Возможно кому-то это поможет и сэкономит время и силы.
Теги: #Android #контактыдоговор #разработка Android
-
Руководство По Бою В Skyforge
19 Oct, 24 -
Как Тимлид Может Развивать Команду?
19 Oct, 24 -
Темная Цветовая Схема Для Netbeans
19 Oct, 24 -
Несколько Слов О Дневнике Проекта
19 Oct, 24 -
Тестируемый Виджет Microsoft Translator
19 Oct, 24 -
Нужен Ли Rss Для Песочницы Хабра?
19 Oct, 24