1

I am implementing an AutocompleteView to search phone numbers. The code is working fine except in some conditions.

My Code :

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

This code is working fine where there is no space in the phone numbers. For example if i enter '123' in my autocompleteView, it is able to find phone numbers like '9123456789' or '8283929383' but it is not able to find numbers '9123 456 789' or '912 3456 789'

I even tried implementing this with ContactsContract.PhoneLookup API but with this, it didnt work at all.

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

Any help is appreciated.

mudit
  • 25,306
  • 32
  • 90
  • 132
  • 3
    Instead of using `ContactsContract.CommonDataKinds.Phone.NUMBER`, you could try to use `ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER` (E164 format) – itechevo Feb 04 '16 at 11:00
  • @itechevo : thanks man! It worked. you can post it as answer so that i can mark is as accepted. – mudit Feb 04 '16 at 11:11

1 Answers1

3

Instead of using ContactsContract.CommonDataKinds.Phone.NUMBER, use ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER (this return phone numbers in E164 format)

itechevo
  • 191
  • 2
  • 5