2012-03-14 48 views
0

我正在做一個應用程序,我需要存儲一些號碼,當有人打電話時,我需要檢查來電號碼是否存在於我的數據庫中。在HashMap中匹配的電話號碼:Android

我做

我存儲的電話號碼是什麼在共享偏好。 內部android爲此使用Map。

問題:

可以說我保存9089889899(10位數的電話號碼)。現在,如果我從此號碼接到來電,它可能爲09089889899或+ 91-9089889899號碼的BroadcastReceiver爲相同。

所以我的問題是,如果我將數字存儲到首選項中,那麼如何匹配輸入的數字是否存在於首選項中。

回答

3

我建議您使用類似libphonenumber的東西來處理獨立於格式的電話號碼。

PhoneNumberUtils中還有一些用於格式化和比較數字的功能。

+0

好的指導方針!謝謝。 – 2012-03-15 07:26:23

+0

你能提供一些關於如何使用libphonenumber匹配兩個數字的教程嗎? – 2012-04-03 07:23:51

1
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

這裏是將匹配所有手機格式

(((([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}))) 
1

如果您使用的是手機作爲sharedpreference則可以鍵入:

  1. 擷取您sharedpreference的所有值:看here
  2. 迭代通過按鍵:看到here
  3. 每個鍵的使用包含字符串的方法:看here

編輯:你爲什麼不使用內容提供者?

1

您可以在BroadCast Receiver中試試以下代碼。 這裏的「abc」與你的共享Perefence的名字。假設這裏的數字是您從廣播接收器獲得的數字: 在代碼中,最後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"); 

}