Android Resolver соответствия номера телефона с другим форматированием - PullRequest
0 голосов
/ 06 октября 2011

Я смотрю на создание запроса распознавателя контента, который пытается сопоставить номер телефона.Он не работает, когда телефонный номер в БД хранится в другом формате, который я пытаюсь сравнить с

, например.LocalContact Phone Number = '1 555 555 1234' Я пытаюсь сравнить с '+ 15555551234'

String phoneQueryString = "( mimetype = 'vnd.android.cursor.item/phone_v2' 
                             AND (data1 = '+15555551234'  ))";

Cursor myContacts3 = myCR.query(
                    Data.CONTENT_URI,
                    null, 
                    phoneQueryString, 
                    null,
                    null);

myContacts3.getCount () возвращает ноль записей.Я знаю, что мог бы использовать phoneNumberUtils для захвата каждого телефонного номера в базе данных DB & PhoneNumberUtils.compare (num1, num2), но это неэффективно.Я могу удалить «+» из моего «+15555551234», но тогда, если он был перевернут, где мой локальный контакт был «+15555551234», а мой источник был «15555551234», он не будет работать.в основном мне нужно удалить любые дополнительные нечисловые символы в запросе к данным1.Или другие предложения приветствуются.

Ответы [ 3 ]

1 голос
/ 08 июля 2014

Итак, в библиотеку sqlite extern добавлена ​​недокументированная функция sqlite google: static void phone_numbers_equal (sqlite3_context * context, int argc, sqlite3_value ** argv)

Я не использовал его некоторое время, но вы должны быть в состоянии использовать это:

String phoneQueryString = "( mimetype = 'vnd.android.cursor.item/phone_v2' 
                             AND (phone_numbers_equal(data1,'+15555551234')  ))";

Cursor myContacts3 = myCR.query(
                    Data.CONTENT_URI,
                    null, 
                    phoneQueryString, 
                    null,
                    null);
0 голосов
/ 18 октября 2015

Вы должны использовать ContactsContract.PhoneLookup .

Формат номера телефона не имеет значения. Сравнение надежно и высоко оптимизировано на Android; это делается с помощью встроенной функции sqlite с именем PHONE_NUMBERS_EQUAL.

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode("+15555551234"));
Cursor phone =getContentResolver().query(uri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);
0 голосов
/ 06 октября 2011

Вы можете попробовать что-то вроде этого:

String s = //your phone number goes here
s = s.replaceAll("[^0-9]", "");

Это должно удалить все символы, которые не являются 0-9. Если вы используете это на обоих телефонных номерах, их форматы должны совпадать.

...