Соответствие входящих и исходящих телефонных номеров - PullRequest
0 голосов
/ 25 января 2011

В настоящее время я создаю приложение для просмотра SMS и использую ContentResolver для получения всех SMS-сообщений на телефоне (да, я понимаю риски). Как и другие приложения, я хочу сгруппировать все сообщения от одного человека в одну ветку, отобразить из них последнее сообщение и упорядочить контакты по дате последнего сообщения.

Когда речь идет о значениях адресов входящих сообщений, все они содержат код страны (например, +44123456789). Но когда пользователь сохраняет свои контакты, он может игнорировать код страны и просто ввести локальный формат. Таким образом, все исходящие сообщения сохраняются как 0123456789.

Итак, база данных будет содержать один и тот же адрес в обоих форматах, +44123456789 и 0123456789. Как вы сопоставите это 2 и удалите дублирующий адрес?

Примечание: 1) Сообщения от одного и того же человека могут не иметь одинаковый «идентификатор потока» 2) Для адреса

может отсутствовать значение «идентификатор контакта» / «отображаемое имя»

Ответы [ 2 ]

2 голосов
/ 02 февраля 2011

На самом деле, сообщения от одного и того же контакта находятся в одной и той же теме, поэтому они имеют одинаковый идентификатор потока. (За исключением нескольких сообщений получателей, которые находятся в собственной ветке).

Просматривая content: // sms и сохраняя список полученных thread_ids, вы можете убедиться в отсутствии дубликатов. Со значением адреса вы можете использовать следующий код для получения отображаемого имени.

Теперь я пытаюсь оптимизировать это:

private String quickCallerId(String phoneNumber){
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
    ContentResolver resolver=getContentResolver();
    Cursor cur = resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null);
    if(cur!=null&&cur.moveToFirst()){
            String value=cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME));
            if(value!=null){ 
                cur.close();
                return value;
            }
    }
    cur.close();
    return "";
}
0 голосов
/ 25 января 2011

У меня нет кода для меня, но довольно просто разобрать строку справа налево. Вы можете сделать это и просто установить произвольный предел того, насколько точным должен быть стоп.

Например (псевдокод), учитывая 2 строки (строка1 и строка2):

if first-char = '+'
  len = 9
else
  len = length(string1)
end
len = min(len, length(string2))
match = true
for i = len to 1
  if substr( string2, i, 1) != substr( string2, i, 1)
    match = false
    quit
  end
  i--
end

Вы можете полюбоваться, проверив символы сразу после знака «+», чтобы определить код страны, который даст вам знать, как долго могут быть номера телефонов этой страны.

Вам также необходимо проверить людей, которые вводят номера, например, например. '(123) 456-7890 x1234', если это возможно. Так что может быть проще использовать какой-нибудь вариант регулярного выражения ...

Рори

...