gpt4 book ai didi

java - 在 Android 中通过 PHOTO_FILE_ID 将联系人的图像更改为大照片

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:23 25 4
gpt4 key购买 nike

这似乎适用于小图像:

ContentValues values = new ContentValues();

values.put(ContactsContract.Data.RAW_CONTACT_ID, id);
values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
if (photoRow >= 0) {
context.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID + " = " + photoRow, null);
} else {
context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
}

来自docs我意识到对于大图像我需要设置 PHOTO_FILE_ID,所以我可以替换:

ContactsContract.CommonDataKinds.Photo.PHOTO

与:

ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID

但是,我需要提供 PHOTO_FILE_ID 而不是原始数据。我的问题:

  1. 如何保存照片(byte [])并获取 PHOTO_FILE_ID?
  2. 如果已有可用照片(PHOTO 不是 PHOTO_FILE_ID)。我需要删除它才能看到大图吗?还是大图优先?如果不是,我该如何删除?

最佳答案

您自己的答案会奏效,但效率不高,因为照片需要编码为 SQL 查询并通过 Android IPC 进行传输。这也使其受到 Android 1MB 的 IPC 大小限制(即,如果您的照片太大,内容提供程序操作将失败)。

设置(创建或覆盖)RawContact 的(主要)照片的最有效方法是使用 openAssetFileDescriptor和一个 ContactsContract.RawContacts.DisplayPhoto像这样的 URI(从 Android 文档复制的示例):

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

这种方法的唯一缺点是它总是创建/替换 RawContact 的主要照片。如果 RawContact 还没有照片,这将添加一张照片。

遗憾的是,无法将 openAssetFileDescriptorPHOTO_FILE_ID 一起使用,因此您无法使用此方法覆盖由其 ID 标识的特定照片。然而,在现实生活中,大多数联系人可能最多只有一张照片,因此这并不是真正的限制。

这将自动更新 Photo.PHOTO带有大照片缩略图的列,并分配一个 PHOTO_FILE_ID

关于java - 在 Android 中通过 PHOTO_FILE_ID 将联系人的图像更改为大照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36855859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com