我在为Android中的联系人加载照片时遇到问题。我已经用谷歌搜索了一个答案,但到目前为止却空无一人。有没有人举一个查询联系人然后加载照片的例子?因此,给定一个contactUri来自活动结果,该结果称为usingstartActivityForResult(new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI),PICK_CONTACT_REQUEST) 是:内容://com.android.contacts/data/1557loadContact(..)正常工作。但是,当我调用getPhoto(...)方法时,我得到的照片InputStream为空值。这也令人困惑,因为URI值不同。contactPhotoUri评估为:内容://com.android.contacts/contacts/1557请参阅以下代码中的内联注释。 class ContactAccessor { /** * Retrieves the contact information. */ public ContactInfo loadContact(ContentResolver contentResolver, Uri contactUri) { //contactUri --> content://com.android.contacts/data/1557 ContactInfo contactInfo = new ContactInfo(); // Load the display name for the specified person Cursor cursor = contentResolver.query(contactUri, new String[]{Contacts._ID, Contacts.DISPLAY_NAME, Phone.NUMBER, Contacts.PHOTO_ID}, null, null, null); try { if (cursor.moveToFirst()) { contactInfo.setId(cursor.getLong(0)); contactInfo.setDisplayName(cursor.getString(1)); contactInfo.setPhoneNumber(cursor.getString(2)); } } finally { cursor.close(); } return contactInfo; // <-- returns info for contact }显然,我在这里做错了,但我似乎无法弄清楚问题出在哪里。谢谢。
3 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
这对我有用:
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);
}
- 3 回答
- 0 关注
- 391 浏览
添加回答
举报
0/150
提交
取消