从 Android 个联系人数据库中搜索 Phone 个号码

Search Phone numbers from Android Contact Database

我正在实现一个 AutocompleteView 来搜索 phone 号码。代码工作正常,但在某些情况下除外。

我的代码:

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

此代码在 phone 数字中没有 space 的情况下工作正常。例如,如果我在我的 autocompleteView 中输入“123”,它能够找到 phone 数字,例如“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");

感谢任何帮助。

不使用 ContactsContract.CommonDataKinds.Phone.NUMBER,而是使用 ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER(此 return phone E164 格式的数字)