2017-01-14 1 views
0

Dans mon application, j'essaie de rechercher un contact en utilisant le numéro de téléphone. Le numéro de téléphone avec lequel je cherche est toujours dans le même format ('123456789' par exemple). Mais le code suivant récupère pas tous les contacts que j'attendais. Le problème principal pourrait être le format différent des numéros de téléphone dans mon téléphone: certains contacts sont enregistrés avec '+12 345 6789', l'autre avec ''. Bien que j'aie essayé ContactsContract.PhoneLookup.NORMALIZED_NUMBER, mon code récupère uniquement les contacts enregistrés avec des numéros de téléphone au format '123456789'.Android - Recherche de contacts avec différents formats de nombre

private String getContactDetails(Context context, String number) { 
    String[] projection = new String[] { 
      ContactsContract.PhoneLookup.DISPLAY_NAME, 
      ContactsContract.PhoneLookup._ID, 
      ContactsContract.PhoneLookup.LOOKUP_KEY}; 
    int len = number.length(); 
    Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.substring(len-7))); 
    String selection = null; 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     selection = ContactsContract.PhoneLookup.NORMALIZED_NUMBER + " LIKE %" + number.substring(len-7) + "%"; 
    } 
    Cursor cursor = context.getContentResolver().query(contactUri, projection, selection, null, null); 
    String name = null; 
    if(cursor != null) { 
     if (cursor.moveToFirst()) { 
      name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 
     } 
     cursor.close(); 
    } 
    return name; 
} 

Répondre

0

Ne pas utiliser les deux PhoneLookup.CONTENT_FILTER_URI avec selection, CONTENT_FILTER_URI s sont utilisés pour rechercher des données en utilisant l'URI lui-même, et ne doit pas constituer une sélection.

La colonne PhoneLookup.NORMALIZED_NUMBER permet de récupérer le résultat au format e164, pas pour l'interrogation.

Essayez ceci:

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode("123456789")); 
String[] projection = new String[] { PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER }; 
Cursor c = getContentResolver().query(uri, projection, null, null, null); 
if (c != null) { 
    if (c.moveToFirst()) { 
     String number = c.getString(0); 
     String e164_number = c.getString(1); 
     Log.d(TAG, "number=" + number + ", e164=" + e164_number); 
    } else { 
     Log.d(TAG, "couldn't find number"); 
    } 
} 
c.close();