Android 获取 RAW_CONTACT 图片 uri

Android get RAW_CONTACT image uri

要获取联系人照片 uri,您只需休假 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 列下的数据 table 中找到的缩略图 BLOB 不感兴趣,但对高分辨率图像不感兴趣。

您正在寻找 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.
     }
 }