Я использую 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'
Я даже попытался реализовать это с помощью API ContactsContract.PhoneLookup
, но с этим он вообще не работал.
код с 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' (Формат E164) – itechevo
@itechevo: спасибо, человек! Это сработало. вы можете опубликовать его как ответ, чтобы я мог отметить это как принято. – mudit