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.

  • Est-ce que Google aidera NDK C ++ se bloque dans Firebase Crash Reporting?
  • Que fait l'élévation dans Android L?
  • Essayer d'invoquer la méthode virtuelle
  • Comodo SSL: ERR_CERT_AUTHORITY_INVALID sur Chrome mobile et Opera mobile (Android)
  • 'Adb' n'est pas reconnu comme une commande interne ou externe, un programme opérationnel ou un fichier batch
  • Appeler une méthode Fragment à partir d'une activité parentale
  • 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.