Android - Get Contact Photo from phone number

后端 未结 6 1018
失恋的感觉
失恋的感觉 2020-12-15 19:45

how can I get contact photo from a contact\'s address (phone number)?

相关标签:
6条回答
  • 2020-12-15 20:06

    You can use the column below to get the contacts photo uri, ContactsContract.CommonDataKinds.Phone.PHOTO_URI.

    0 讨论(0)
  • 2020-12-15 20:13

    You can make some changes if you want to get Retrieving the larger photo

     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;
        }
    

    for Retrieving the thumbnail-sized photo

     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;
     }
    

    for more detail:

    Click Here

    0 讨论(0)
  • 2020-12-15 20:14

    Call this method to get all contact information.

    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 讨论(0)
  • 2020-12-15 20:16

    This is the function:

        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;
        }
    
    0 讨论(0)
  • 2020-12-15 20:17

    I think this vesion works better in all android versions :

    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;
    
    }
    
    0 讨论(0)
  • 2020-12-15 20:24
    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 {
                if(contactId != null) {
                    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 讨论(0)
提交回复
热议问题