Comment obtenir une photo de contact URI

Je travaille avec Android Contact ContentProvider. J'ai un numéro de téléphone et j'ai besoin d'obtenir l' URI de la photo du contact associé à ce numéro de téléphone. Comment puis-je le faire???

Je sais que je peux obtenir les données brutes de la photo et construire un InputStream , mais je ne veux pas le flux d'entrée, j'ai besoin de l' URI .

  • Les annonces Admob ne s'affichent pas
  • Ouvrez l'application Android via un lien approfondi s'il est installé ou retombe sur le Web s'il n'est pas installé
  • Android Lollipop: ImageView ignorant l'attribut fitsSystemWindows (barre d'état transparente)
  • Insertion de valeurs dans la table SQLite dans Android
  • Bibliothèques Android non trouvées
  • Faire un élément central pour rester coincé dans l'en-tête (ScrollView / ListView)
  • EDIT: À l'origine, j'utilise le code suivant pour récupérer les informations de contact

    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNo)); Cursor cursor = context.getContentResolver().query(uri, details, null, null, null); 

  • Utilisation du même OnTouchEvent dans diverses activités
  • Fragments onClick method in fragment element
  • Samsung Galaxy s2 DSR est activé. N'a pas envoyé DTR ON
  • Exemple simple d'utilisation <fusion> et <inclure> dans les mises en page XML d'Android
  • Comment prendre en charge les contrôles dpad pour RecyclerView
  • Importer google-play-service dépendance rouge croix
  • 4 Solutions collect form web for “Comment obtenir une photo de contact URI”

    Pour obtenir l'identifiant Conatct à l'aide du numéro de téléphone, utilisez le code suivant:

     import android.provider.ContactsContract.PhoneLookup; public String fetchContactIdFromPhoneNumber(String phoneNumber) { Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = this.getContentResolver().query(uri, new String[] { PhoneLookup.DISPLAY_NAME, PhoneLookup._ID }, null, null, null); String contactId = ""; if (cursor.moveToFirst()) { do { contactId = cursor.getString(cursor .getColumnIndex(PhoneLookup._ID)); } while (cursor.moveToNext()); } return contactId; } 

    Et utiliser l'identifiant de contact obtenu pour obtenir l'image URI de photos contatc. Utilisez le code suivant pour obtenir un URI photo:

     import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; public Uri getPhotoUri(long contactId) { ContentResolver contentResolver = getContentResolver(); try { Cursor cursor = contentResolver .query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + "=" + contactId + " AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null, null); if (cursor != null) { if (!cursor.moveToFirst()) { return null; // no photo } } else { return null; // error in cursor process } } catch (Exception e) { e.printStackTrace(); return null; } Uri person = ContentUris.withAppendedId( ContactsContract.Contacts.CONTENT_URI, contactId); return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); } 

    J'espère que cela aiderait.

    Cette solution démontre comment obtenir une image à partir d'un contact utilisateur, puis l'afficher dans un ImageView .

     ImageView profile = (ImageView)findViewById(R.id.imageView1); Uri my_contact_Uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(Contact_Id)); InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(),my_contact_Uri); BufferedInputStream buf =new BufferedInputStream(photo_stream); Bitmap my_btmp = BitmapFactory.decodeStream(buf); profile.setImageBitmap(my_btmp); 

    Voici le code de la documentation Android .

     Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId); return Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
      final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; String phoneNumber = "+1 416 385 7805"; ContentResolver contentResolver = context.getContentResolver(); Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, IS_HONEYCOMB ? ContactsContract.Contacts.PHOTO_THUMBNAIL_URI : ContactsContract.Contacts._ID, }; Cursor cursor = contentResolver.query( uri, projection, null, null, null); if (cursor != null && cursor.moveToNext()) { long contactId = cursor.getLong(0); String lookupKey = cursor.getString(1); String thumbnailUri = cursor.getString(2); cursor.close(); } 

    Donc, maintenant, si sdk est en nid d'abeille ou plus haut, vous avez la vignette du contact. Ou vous pouvez construire une recherche comme celle-ci:

     Uri uri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey); 

    PS Si vous connaissez déjà l' ID de contact et / ou la clé de recherche, vous pouvez construire un Uri à partir d'une chaîne:

    content://com.android.contacts/contacts/lookup/{lookup key}/{contact id} : content://com.android.contacts/contacts/lookup/{lookup key}/{contact id} vignette: content://com.android.contacts/contacts/{contact id}/photo

    Il est donc préférable de mettre en cache ces valeurs.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.