2015-02-02 20 views
8

come posso ottenere foto di contatto dall'indirizzo di un contatto (numero di telefono)?Android - Ottieni foto contatto dal numero di telefono

+0

riferiscono questo URL: http://developer.android.com/reference /android/provider/ContactsContract.Contacts.Photo.html – ATRS

+0

Possibile duplicato di [come ottenere l'URI della foto del contatto] (http://stackoverflow.com/questions/7738192/how-to-get-contact-photo-uri) – Mussa

+0

Prova questo, forse ti aiuterà http://stackoverflow.com/a/38992166/4593930 –

risposta

15
public static Bitmap retrieveContactPhoto(Context context, String number) { 
     ContentResolver contentResolver = context.getContentResolver(); 
     String contactId = null; 
     Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 

     String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}; 

     Cursor cursor = 
       contentResolver.query(
         uri, 
         projection, 
         null, 
         null, 
         null); 

     if (cursor != null) { 
      while (cursor.moveToNext()) { 
       contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID)); 
      } 
      cursor.close(); 
     } 

     Bitmap photo = BitmapFactory.decodeResource(context.getResources(), 
       R.drawable.default_image); 

     try { 
      InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(), 
        ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(contactId))); 

      if (inputStream != null) { 
       photo = BitmapFactory.decodeStream(inputStream); 
      } 

      assert inputStream != null; 
      inputStream.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return photo; 
    } 
+0

Grazie a questa soluzione funziona fin eccetto che devi controllare se contactId è nullo o meno prima di aprire il flusso di input –

4

È possibile utilizzare la colonna in basso per ottenere i contatti foto uri, ContactsContract.CommonDataKinds.Phone.PHOTO_URI.

2

Chiamare questo metodo per ottenere tutte le informazioni di contatto.

public void readContacts() { 
    StringBuffer sb = new StringBuffer(); 
    sb.append("......Contact Details....."); 
    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
    null, null, null); 
    String phone = null; 
    String emailContact = null; 
    String emailType = null; 
    String image_uri = ""; 
    Bitmap bitmap = null; 
    if (cur.getCount() > 0) { 
    while (cur.moveToNext()) { 
    String id = cur.getString(cur 
     .getColumnIndex(ContactsContract.Contacts._ID)); 
    String name = cur 
     .getString(cur 
     .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

    image_uri = cur 
     .getString(cur 
     .getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 
    if (Integer 
     .parseInt(cur.getString(cur 
     .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
    System.out.println("name : " + name + ", ID : " + id); 
    sb.append("\n Contact Name:" + name); 
    Cursor pCur = cr.query(
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
     + " = ?", new String[] { id }, null); 
    while (pCur.moveToNext()) { 
     phone = pCur 
     .getString(pCur 
      .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     sb.append("\n Phone number:" + phone); 
     System.out.println("phone" + phone); 
    } 
    pCur.close(); 

    Cursor emailCur = cr.query(
     ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.Email.CONTACT_ID 
     + " = ?", new String[] { id }, null); 
    while (emailCur.moveToNext()) { 
     emailContact = emailCur 
     .getString(emailCur 
      .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
     emailType = emailCur 
     .getString(emailCur 
      .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 
     sb.append("\nEmail:" + emailContact + "Email type:" + emailType); 
     System.out.println("Email " + emailContact 
     + " Email Type : " + emailType); 

    } 

    emailCur.close(); 
    } 

    if (image_uri != null) { 
    System.out.println(Uri.parse(image_uri)); 
    try { 
     bitmap = MediaStore.Images.Media 
     .getBitmap(this.getContentResolver(), 
      Uri.parse(image_uri)); 
     sb.append("\n Image in Bitmap:" + bitmap); 
     System.out.println(bitmap); 

    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    } 


    sb.append("\n........................................"); 
    } 

    textDetail.setText(sb); 
    } 
} 
+0

tnx Io uso il tuo codice con l'argomento select così io puoi recuperare foto con il numero –

+0

Sei sempre il benvenuto caro ....... –

1

Questa è la funzione:

public static Bitmap getContactsDetails(String address) { 
     Bitmap bp = BitmapFactory.decodeResource(context.getResources(), 
         R.drawable.default_contact_photo); 
     String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " = '" + address + "'"; 
     Cursor phones = context.getContentResolver().query(
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, selection, 
       null, null); 
     while (phones.moveToNext()) { 
      String image_uri = phones.getString(phones.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 

      if (image_uri != null) { 
       try { 
        bp = MediaStore.Images.Media 
        .getBitmap(context.getContentResolver(), 
         Uri.parse(image_uri)); 

       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 
     return bp; 
    } 
3

Penso che questa vesione funziona meglio in tutte le versioni di Android:

public Bitmap getContactsDetails(String address) { 
    Bitmap bp = BitmapFactory.decodeResource(context.getResources(), 
      R.drawable.contact_default_picture); 





    Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(address)); 

    // querying contact data store 
    Cursor phones = context.getContentResolver().query(contactUri, null, null, null, null); 


    while (phones.moveToNext()) { 
     String image_uri = phones.getString(phones.getColumnIndex(
       ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 

     if (image_uri != null) { 

      try { 
       bp = MediaStore.Images.Media 
         .getBitmap(context.getContentResolver(), 
           Uri.parse(image_uri)); 

      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 

    return bp; 

} 
1

È possibile apportare alcune modifiche, se si vuole Get Recupero delingrandisci

public Bitmap retrieveContactPhoto(Context context, String number) { 
     ContentResolver contentResolver = context.getContentResolver(); 
     String contactId = null; 
     Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 

     String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}; 

     Cursor cursor = 
       contentResolver.query(
         uri, 
         projection, 
         null, 
         null, 
         null); 

     if (cursor != null) { 
      while (cursor.moveToNext()) { 
       contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID)); 
      } 
      cursor.close(); 
     } 

     Bitmap photo = BitmapFactory.decodeResource(context.getResources(), 
       R.mipmap.popup); 

     try { 

      Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.valueOf(contactId)); 
      Uri displayPhotoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.DISPLAY_PHOTO); 

       AssetFileDescriptor fd = 
         getContentResolver().openAssetFileDescriptor(displayPhotoUri, "r"); 
       InputStream inputStream=fd.createInputStream(); 


      if (inputStream != null) { 
       photo = BitmapFactory.decodeStream(inputStream); 
      } 

      assert inputStream != null; 
      inputStream.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return photo; 
    } 

per Recuperare la miniatura della foto di dimensioni

public InputStream openPhoto(long contactId) { 
    Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 
    Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY); 
    Cursor cursor = getContentResolver().query(photoUri, 
      new String[] {Contacts.Photo.PHOTO}, null, null, null); 
    if (cursor == null) { 
     return null; 
    } 
    try { 
     if (cursor.moveToFirst()) { 
      byte[] data = cursor.getBlob(0); 
      if (data != null) { 
       return new ByteArrayInputStream(data); 
      } 
     } 
    } finally { 
     cursor.close(); 
    } 
    return null; 
} 

per maggiori dettagli:

Click Here

Problemi correlati