Obtenir un nom de contact donné un numéro de téléphone dans Android

J'essaie de récupérer les noms de contact compte tenu du numéro de téléphone de contact. J'ai fait une fonction qui devrait fonctionner dans toutes les versions de l'API, je ne peux pas le faire fonctionner en 1.6 et je ne peux pas voir le problème, peut-être que quelqu'un peut le repérer?

Notez que j'ai remplacé les constantes API pour les chaînes, donc je n'ai pas de problèmes d'avertissement obsolètes.

  • Comment savoir si ListView a parcouru le haut de la page La plupart des positions?
  • Démarrer l'apk avec différents magasins de clés
  • Android hdpi / mdpi / ldpi pour le dossier Values?
  • Android: restreindre l'utilisateur à sélectionner uniquement dans la visualisation de texte automatique
  • Dépendances IntelliJ et Android Gradle - impossible de trouver le module
  • Obtenir le texte du bouton pressé
  • public String getContactName(final String phoneNumber) { Uri uri; String[] projection; if (Build.VERSION.SDK_INT >= 5) { uri = Uri.parse("content://com.android.contacts/phone_lookup"); projection = new String[] { "display_name" }; } else { uri = Uri.parse("content://contacts/phones/filter"); projection = new String[] { "name" }; } uri = Uri.withAppendedPath(uri, Uri.encode(phoneNumber)); Cursor cursor = this.getContentResolver().query(uri, projection, null, null, null); String contactName = ""; if (cursor.moveToFirst()) { contactName = cursor.getString(0); } cursor.close(); cursor = null; return contactName; } 

    4 Solutions collect form web for “Obtenir un nom de contact donné un numéro de téléphone dans Android”

    Utilisez des reflets au lieu de comparer la version sdk.

     public String getContactName(final String phoneNumber) { Uri uri; String[] projection; mBaseUri = Contacts.Phones.CONTENT_FILTER_URL; projection = new String[] { android.provider.Contacts.People.NAME }; try { Class<?> c =Class.forName("android.provider.ContactsContract$PhoneLookup"); mBaseUri = (Uri) c.getField("CONTENT_FILTER_URI").get(mBaseUri); projection = new String[] { "display_name" }; } catch (Exception e) { } uri = Uri.withAppendedPath(mBaseUri, Uri.encode(phoneNumber)); Cursor cursor = this.getContentResolver().query(uri, projection, null, null, null); String contactName = ""; if (cursor.moveToFirst()) { contactName = cursor.getString(0); } cursor.close(); cursor = null; return contactName; } 

    Cela semble fonctionner correctement dans les dernières versions:

     private String getContactName(Context context, String number) { String name = null; // define the columns I want the query to return String[] projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}; // encode the phone number and build the filter URI Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); // query time Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null); if(cursor != null) { if (cursor.moveToFirst()) { name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); Log.v(TAG, "Started uploadcontactphoto: Contact Found @ " + number); Log.v(TAG, "Started uploadcontactphoto: Contact name = " + name); } else { Log.v(TAG, "Contact Not Found @ " + number); } cursor.close(); } return name; } 
      private String getContactNameFromNumber(String number) { Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); Cursor cursor = context.getContentResolver().query(uri, new String[]{PhoneLookup.DISPLAY_NAME},null,null,null); if (cursor.moveToFirst()) { name = cursor.getString(cursor.getColumnIndex(PhoneLookup.D 
     public static String getContactName(Context context, String phoneNumber) { ContentResolver cr = context.getContentResolver(); Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = cr.query(uri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null); if (cursor == null) { return null; } String contactName = null; if(cursor.moveToFirst()) { contactName = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)); } if(cursor != null && !cursor.isClosed()) { cursor.close(); } return contactName; } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.