Android获取RAW_CONTACT图像uri

时间:2017-02-20 04:21:57

标签: android android-contacts

要获得联系人照片,您可以简单地休息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感兴趣,但对高分辨率图像不感兴趣。

1 个答案:

答案 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.
     }
 }