2016-02-04 54 views
1

我正在實施一個AutocompleteView來搜索電話號碼。代碼工作正常,除了在某些情況下。從Android聯繫人數據庫搜索電話號碼

我的代碼:

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
    String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE}; 
    String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE ?"; 
    String[] selectionArgs = new String[]{"%" + charSequence.toString() + "%"}; 
    Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); 

此代碼工作得很好,沒有在電話號碼沒有空間。例如,如果我在我的autocompleteView中輸入'',它可以找到類似'9123456789'或'8283929383'的電話號碼,但無法找到號碼'9123 456 789'或'912 3456 789'

我甚至試圖用ContactsContract.PhoneLookup API來實現這個,但是這樣做完全沒有效果。

代碼ContactsContract.PhoneLookup API:

String[] projection = new String[]{ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup.TYPE}; 

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(charSequence.toString())); 

Cursor cursor = context.getContentResolver().query(uri, projection, null, null, ContactsContract.PhoneLookup.DISPLAY_NAME + " ASC"); 

任何幫助表示讚賞。

+3

,你可以嘗試使用'ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER' (E164格式) – itechevo

+0

@itechevo:謝謝你!有效。你可以發佈它作爲答案,以便我可以標記爲被接受。 – mudit

回答

2

而不是使用ContactsContract.CommonDataKinds.Phone.NUMBER的使用,而不是使用`ContactsContract.CommonDataKinds.Phone.NUMBER`的ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER(這回手機E164的數字格式)

相關問題