要获得联系人照片,您可以简单地休息docs:
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
return Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
但在我的情况下,我想要显示属于单个联系人的所有RAW_CONTACTS,因为我需要他们的高分辨率照片uri。那我怎么能得到一个?
请注意,我对您可以在Contacts.Photo.PHOTO
列下的数据表中找到的缩略图BLOB感兴趣,但对高分辨率图像不感兴趣。
答案 0 :(得分:2)
您正在寻找ContactsContract.RawContacts.DisplayPhoto
,
以下是docs的正式用法示例(将照片写入照片到RawContact中):
public void writeDisplayPhoto(long rawContactId, byte[] photo) {
Uri rawContactPhotoUri = Uri.withAppendedPath(
ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId),
RawContacts.DisplayPhoto.CONTENT_DIRECTORY);
try {
AssetFileDescriptor fd =
getContentResolver().openAssetFileDescriptor(rawContactPhotoUri, "rw");
OutputStream os = fd.createOutputStream();
os.write(photo);
os.close();
fd.close();
} catch (IOException e) {
// Handle error cases.
}
}
以下是阅读方法:
public byte[] readDisplayPhoto(long rawContactId) {
byte[] photo;
Uri rawContactPhotoUri = Uri.withAppendedPath(
ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId),
RawContacts.DisplayPhoto.CONTENT_DIRECTORY);
try {
AssetFileDescriptor fd = getContentResolver().openAssetFileDescriptor(rawContactPhotoUri, "r");
FileInputStream is = fd.createInputStream();
is.read(photo);
is.close();
fd.close();
return photo
} catch (IOException e) {
// Handle error cases.
}
}