从 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 格式的数字)
我正在实现一个 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 格式的数字)