2017-07-30 2 views
0

Je souhaite effectuer une recherche dans la liste de contacts de l'utilisateur android, en tapant seulement 3-4 chiffres d'un numéro particulier. J'ai écrit la méthode suivante pour faire la même chose, mais cela ne fonctionne que lorsque j'écris complète 10 chiffres du nombre et pas moins que cela. Cela signifie qu'il ne fonctionne qu'avec la correspondance exacte. Je veux par exemple le numéro de départ 98965 ... et ainsi de suite .. mais je ne me donne un match quand je tape complet 9896511112Rechercher un contact avec une chaîne de recherche partielle

public static void getContactDetails(Context context, String number, int type) { 
     String[] projection = new String[]{ 
       ContactsContract.PhoneLookup.DISPLAY_NAME, 
       ContactsContract.PhoneLookup._ID, 
       ContactsContract.PhoneLookup.LOOKUP_KEY, 
       ContactsContract.PhoneLookup.PHOTO_URI, 
       ContactsContract.PhoneLookup.NUMBER}; 
     Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.trim() + "%")); 

     Cursor cursor = context.getContentResolver().query(contactUri, null, null, null, null); 

     while (Common.nonNull(cursor) && cursor.moveToNext()) { 
      String lookUpKey = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.LOOKUP_KEY)); 
      String mobileNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.NUMBER)); 
      Log.e("I am found", "Found " + number); 
     } 
     cursor.close(); 
    } 

S'il vous plaît aidez-moi à trouver mon erreur.

Répondre

0

Ahh enfin. Une chose qui a sauvé ma journée:

Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(partial)); 

Utilisez "ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI" au lieu de ContactsContract.PhoneLookup.CONTENT_FILTER_URI, et cela fonctionnera pour vous.

Voici mon exemple complet ci-dessous:

public static void getContactDetails(Context context, String number, int type) { 
    String[] projection = new String[]{ 
      ContactsContract.PhoneLookup.DISPLAY_NAME, 
      ContactsContract.PhoneLookup._ID, 
      ContactsContract.PhoneLookup.LOOKUP_KEY, 
      ContactsContract.PhoneLookup.PHOTO_URI, 
      ContactsContract.CommonDataKinds.Phone.NUMBER}; 
    Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number.trim())); 

    Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null); 

    while (Common.nonNull(cursor) && cursor.moveToNext()) { 
     String lookUpKey = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.LOOKUP_KEY)); 
     String mobileNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 

     if (mobileNumber.length() > 10) { 
      mobileNumber = mobileNumber.substring(mobileNumber.length() - 10); 
      if (mobileNumber.startsWith(number)) { 
       Log.e("I am found", "I am found " + mobileNumber + displayName); 
      } 
     } 

    } 

    cursor.close(); 
}