Соответствующий номер телефона в HashMap: Android - PullRequest
0 голосов
/ 14 марта 2012

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

Что ясделал

Я сохранил номера телефонов в общих настройках. Внутренне Android использует Map для этой цели.

Проблема:

Допустим, я сохранил 9089889899 (10-значный номер телефона).Теперь, если я получаю входящий звонок с этого номера, он может BroadcastReceiver, имеющий номер 09089889899 или + 91-9089889899 для того же номера.

Так что моя проблема в том, что если я сохранил номер в настройках, то как я могу сопоставить входящий номер, присутствует в настройках или нет.

Ответы [ 5 ]

3 голосов
/ 14 марта 2012

Я предлагаю вам использовать что-то вроде libphonenumber для обработки телефонных номеров независимо от формата.

В PhoneNumberUtils также есть некоторые функции для форматирования и сравнения чисел.

1 голос
/ 14 марта 2012

Вы можете попробовать следующий код в BroadCast Receiver. здесь "abc" с именем вашего общего перефенсинга. Предполагая, что num здесь - это число, которое вы получили от Broadcast Receiver: В коде последние 10 цифр извлекаются и сравниваются, поскольку они хранятся в SharedPreference.

  SharedPreferences sp = getSharedPreferences("abc",Context.MODE_PRIVATE);
    HashMap< String, String>hMap = (HashMap<String, String>) sp.getAll();
    String num = "+91-9089889899";

 if(   hMap.containsValue(num.substring(num.length()-10))){
     System.out.println("number present");

 }
1 голос
/ 14 марта 2012

Если вы используете мобильный телефон в качестве ключа для общего предпочтения, вы можете:

  1. Извлеките все значения вашего общего предпочтения: см. здесь
  2. перебрать набор ключей: см. здесь
  3. для каждого ключа используется метод содержит строковые значения: см. здесь

Редактировать: почему вы не используете контент-провайдера?

1 голос
/ 14 марта 2012
SharedPreferences settings;
settings = getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);

//for get sharepref
String phone = settings.getString("9089889899", 0);

//strPhone = has your broadcast receive number

if(strPhone.contains(phone)){

}else{

}
0 голосов
/ 14 марта 2012

это регулярное выражение, которое будет соответствовать всем телефонным форматам

(((([0-9]){0,1})(([0-9]){10}))|([0-9]){10}|(\+([0-9]){1,2}([0-9]{10})))

первая часть соответствует 0 - 1231231234 вторая часть соответствует 1231231234 последняя часть +91 - 1231231234

обновление

на самом деле это намного лучше

(((([0-9]){0,1})(([0-9]){10}))|(\+([0-9]){1,2}([0-9]{10})))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...