我试图在Imageview上阅读并显示联系人的全尺寸照片。下面的代码在有本地创建的联系人的模拟器中运行良好。
在Attrix 4G上进行测试时,其中有来自gmail的联系人,它不会显示完整大小的联系人。
Uri contactUri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, id);
Uri displayPhotoUri = Uri.withAppendedPath(contactUri,
ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
AssetFileDescriptor fd = cr.openAssetFileDescriptor(
displayPhotoUri, "r");
input = fd.createInputStream();
return BitmapFactory.decodeStream(input);
答案 0 :(得分:1)
从我的阅读中,问题仅仅是因为Gmail没有同步照片的高分辨率版本,特别是对于较旧的设备/ API级别。
因此,如果照片可用,您的代码将起作用,对openAssetFileDescriptor的调用将失败,因为没有相应的高分辨率文件。
请参阅针对Android报告的此issue(错误?)。
答案 1 :(得分:1)
一些代码如何在Nexus 4上为我工作。
ContentResolver cr = getContext().getContentResolver();
PersonUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, 3347);
Uri displayPhotoUri = Uri.withAppendedPath(PersonUri, ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
try {
AssetFileDescriptor fd = cr.openAssetFileDescriptor(displayPhotoUri, "r");
input = fd.createInputStream();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, PersonUri);
if(input != null){
showImage(mPhoto, BitmapFactory.decodeStream(input));
}else{
showImage(mPhoto, R.drawable.jb_picture_unknown);
}