2016-11-10 63 views
1

我想在Android應用程序中實現一個功能,其中作爲用戶鍵在數字中,我想逐步搜索電話簿(通用電話簿搜索)中的這些數字並顯示結果。搜索Android代碼中的電話號碼

對於這一點,我使用

Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,Uri.encode(aNumber的));

這似乎爲大多數情況下工作,並正在處理中搜索「」等

有,我不能夠解決2個問題:

  1. 它沒有忽視國內碼。

因此,例如,如果我有一個號碼:+ 9199776xx123 當我的搜索字符串是+9199時,結果出現。而如果我的搜索字符串是9977,它不會出現。

  1. 它不從中間搜索。 當我的搜索字符串是776時,那麼結果也不會出現。

因此,手機的CONTENT_FILTER_URI行爲並不完全清楚。

P.S. :我嘗試過PhoneLookup,但由於某種原因,它不會產生任何結果。我的看法是,它可能無法搜索部分數字。

回答

0

Phone.CONTENT_FILTER_URI是爲速度而構建的,但它並不完美,正如您已經注意到的那樣。 您可以使用普通的Phone.CONTENT_URI來處理任何您想要的請求。

例如爲:

String partialPhone = "9977"; 
String[] projection = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER, Phone. NORMALIZED_NUMBER}; 
String selection = "(" + Phone.NUMBER + " LIKE %" + partialPhone + "%) OR (" + Phone.NORMALIZED_NUMBER + " LIKE %" + partialPhone + "%)"; 
Cursor c = cr.query(Data.CONTENT_URI, projection, selection, null, null); 
0

頗多或研究之後,我能夠找到答案。現在,我搜索列號,數字和規範化數字。由於規範化號碼包含號碼中的國家代碼,因此這將處理這兩種情況。

我的選擇字符串看起來像:

  String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE ? OR " 
       + ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER + " LIKE ?";