从Android联系人数据库中搜索电话号码

时间:2016-02-04 10:47:14

标签: android contactscontract

我正在实施一个AutocompleteView来搜索电话号码。除了某些条件外,代码工作正常。

我的代码:

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");

此代码在电话号码中没有空格的情况下正常工作。例如,如果我输入' 123 '在我的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");

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

不使用ContactsContract.CommonDataKinds.Phone.NUMBER,而是使用ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER(以E164格式返回此电话号码)