HarmonyOS 鸿蒙Next 多张图片如何一次保存到相册
HarmonyOS 鸿蒙Next 多张图片如何一次保存到相册 多张图片如何一次保存到相册,目前未申请存储权限
可以通过fileIo.write将数据写入文件,使用Promise异步回调实现。具体可参考文档https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-fileio-V5#fileiowrite 此demo仅以系统资源为例,事实上任何可以获得arraybuffer的图片都可以作为使用此方法保存。
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { fileIo } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
import { promptAction } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
async function savePhotoToGallery(context: common.UIAbilityContext) {
let helper = photoAccessHelper.getPhotoAccessHelper(context);
try {
let uri: Array<string>=[]
let res:Array<Resource>=[$r('app.media.startIcon'),$r('app.media.ic_tabs_icon_selected')]
// onClick触发后5秒内通过createAsset接口创建图片文件,5秒后createAsset权限收回。
//5s内保存十张图片完全来得及,建议伙伴一次最多允许20到30张图片
for(let i=0;i<2;i++){
uri.push(await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png'))
}
// 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
for(let i=0;i<10;i++){
let urli=uri[i]
let file = await fileIo.open(urli, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
context.resourceManager.getMediaContent(res[i].id, 0)
.then(async value => {
let media = value.buffer;//改成想要保存的图片的buffer,
// 写到媒体库文件中
await fileIo.write(file.fd, media);//fileIO的操作没有时间限制,
await fileIo.close(file.fd);
});
}
promptAction.showToast({ message: '已保存至相册!' });
}
catch (error) {
const err: BusinessError = error as BusinessError;
console.error("Failed to save photo. Code is "+err.code+", message is "+err.message);
}
}
@Entry
@Component
struct Index {
build() {
Row() {
Column({ space: 10 }) {
Image($r('app.media.startIcon'))
.height(200)
.width(200)
.borderRadius(100)
SaveButton({text: SaveDescription.DOWNLOAD}).onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => {
if (result === SaveButtonOnClickResult.SUCCESS) {
const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
savePhotoToGallery(context);
} else {
promptAction.showToast({ message: '设置权限失败!' })
}
})
.borderRadius(100)
}
.width('100%')
}
.height('100%')
.backgroundColor(0xF1F3F5)
}
}
更多关于HarmonyOS 鸿蒙Next 多张图片如何一次保存到相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,若要实现一次性将多张图片保存到相册,可以通过调用系统提供的多媒体存储API来完成。具体操作步骤如下:
-
获取图片数据:首先,确保你已经获取到了需要保存的多张图片的数据,这些数据可以是图片的二进制流,也可以是图片的路径。
-
使用MediaStore API:鸿蒙系统提供了与Android类似的MediaStore API,用于管理媒体文件。你可以通过该API将图片插入到系统的媒体数据库中,从而实现保存到相册的功能。
-
遍历图片并保存:对于每一张图片,构造一个ContentValues对象,设置必要的字段(如标题、显示名称、MIME类型、数据路径等),然后调用ContentResolver的insert方法将其插入到MediaStore的图片表中。
-
处理权限问题:确保你的应用已经获得了写入外部存储的权限,否则保存操作会失败。
-
检查保存结果:插入操作完成后,检查返回的Uri是否有效,以确定图片是否成功保存到相册。
如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html。