我使用以下代码获取联系人图片:
我在适配器类中使用以下代码将联系信息添加到视图中:
Contact c = new Contact("", "", "", null);
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,pCur.getLong(pCur.getColumnIndex(Contacts._ID)));
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
if (input != null) {
Bitmap photo = BitmapFactory.decodeStream(input);
c.setContactImage(photo);
}
contacts.add(c);
我在适配器类中使用以下代码将联系信息添加到视图中:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null) {
holder.img = (ImageView)convertView.findViewById(R.id.imgContact);
Contact entry = getItem(position);
if(entry.getContactImage()!=null){
holder.img.setImageBitmap(entry.getContactImage());
}
}
static class ViewHolder {
TextView name;
TextView number;
ImageView img;
}
manifest文件中包含以下内容:
<uses-sdk android:minSdkVersion="9" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
这在模拟器上运行得很完美,但是当我在我的Android设备上测试时,它不起作用。 我以相同的方式将图像添加到了我的联系人中,模拟器和设备都在2.3上,设备是HTC sensation XL。
我从我的联系人列表中获取的其他信息在两者上都可以正常工作。 有没有人对这个问题有解决方案?
如何实现:
public static Bitmap loadContactPhoto(ContentResolver cr, long id) {
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
if (input == null) {
return null;
}
return BitmapFactory.decodeStream(input);
}
这是如何调用函数的:
c.setContactImage(loadContactPhoto(cr, pCur.getLong(pCur.getColumnIndex(CommonDataKinds.Photo.CONTACT_ID))));