2016-02-04 5 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'

Я даже попытался реализовать это с помощью 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"); 

Любая помощь приветствуется.

+3

Вместо использования 'ContactsContract.CommonDataKinds.Phone.NUMBER', вы можете попробовать использовать' ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER' (Формат E164) – itechevo

+0

@itechevo: спасибо, человек! Это сработало. вы можете опубликовать его как ответ, чтобы я мог отметить это как принято. – mudit

ответ

2

Вместо использования ContactsContract.CommonDataKinds.Phone.NUMBER используйте ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER (это возвращение телефонных номеров в формате E164)