2017-01-14 5 views
0

In meiner Anwendung versuche ich einen Kontakt mit der Telefonnummer zu suchen. Die Telefonnummer, mit der ich suche, hat immer das gleiche Format (zum Beispiel '123456789'). Aber der folgende Code ruft nicht alle Kontakte ab, die ich erwartet habe. Das Hauptproblem könnte das unterschiedliche Format von Telefonnummern in meinem Telefon sein: einige Kontakte werden mit '+12 345 6789', die anderen mit '' gespeichert. Obwohl ich ContactsContract.PhoneLookup.NORMALIZED_NUMBER versucht habe, ruft mein Code nur die Kontakte ab, die mit den Telefonnummern im '123456789'-Format gespeichert wurden.Android - Suche Kontakte mit verschiedenen Formaten der Nummer

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; 
} 

Antwort

0

Sie beide nicht PhoneLookup.CONTENT_FILTER_URI mit selection verwenden, werden CONTENT_FILTER_URI s für Daten unter Verwendung der URI selbst zu suchen, verwendet und sollte keine Auswahl bekommen.

Die Spalte PhoneLookup.NORMALIZED_NUMBER dient dazu, das Ergebnis zurück in ein e164-Format zu bringen, nicht zur Abfrage.

Versuchen Sie folgendes:

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(); 
Verwandte Themen