Android – 从电话号码获取联系人照片

如何从联系人的地址(电话号码)获取联系人照片

Solutions Collecting From Web of "Android – 从电话号码获取联系人照片"

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

你可以使用下面的列获取联系人照片uri, ContactsContract.CommonDataKinds.Phone.PHOTO_URI

我认为这个vesion在所有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; } 
 call this method you 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); } } 

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

你可以做一些改变,如果你想获得 更大的照片

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

用于检索缩略图大小的照片

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

更多细节:

点击这里

调用此方法来获取个人资料图片,电子邮件和名称

 private void getContactDetails(String strMobileNumber) { try { if (!strMobileNumber.equals("")) { Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(strMobileNumber)); String name = "", email = "", photoURI = ""; Uri uriImg = null; String DISPLAY_NAME = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? ContactsContract.Contacts.DISPLAY_NAME_PRIMARY : ContactsContract.Contacts.DISPLAY_NAME; ContentResolver contentResolver = getContentResolver(); Cursor contact = contentResolver.query(uri, new String[]{BaseColumns._ID, DISPLAY_NAME, ContactsContract.PhoneLookup.PHOTO_URI}, null, null, null); try { if (contact != null && contact.getCount() > 0) { contact.moveToFirst(); String id = contact.getString(contact.getColumnIndex(ContactsContract.Contacts._ID)); name = contact.getString(contact.getColumnIndex(DISPLAY_NAME)); photoURI = contact.getString(contact.getColumnIndex(ContactsContract.Contacts.PHOTO_URI)); uriImg = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id)); InputStream stream = ContactsContract.Contacts.openContactPhotoInputStream( getContentResolver(), uriImg); if(stream != null){ Bitmap bitmap = BitmapFactory.decodeStream(stream); imgDetailsPic.setImageBitmap(bitmap); } Cursor ce = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null); if (ce != null && ce.moveToFirst()) { email = ce.getString(ce.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); ce.close(); } Log.d(TAG, "**********Photo = " +photoURI); Log.d(TAG,"**********Name: " + name + "\nEmail: " + email + "\nPhoto URI: " + photoURI); } } catch (Exception e) { e.printStackTrace(); } finally { if (contact != null) { contact.close(); } } txtContactDetails.setText("Name: " + name + "\nEmail: " + email + "\nPhoto URI: " + photoURI); } else { Toast.makeText(ContactDetailsActivity.this, "Enter valid mobile number", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); } }