HarmonyOS鸿蒙Next中在showAssetsCreationDialog中保存动态图呢?
HarmonyOS鸿蒙Next中在showAssetsCreationDialog中保存动态图呢? https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-savebutton-V5 由于是flutter第三方框架没办法用Save_Button. 那么看到了showAssetsCreationDialog. 但是showAssetsCreationDialog没办法把图片和视频生成动态图 然后保存到相册中去啊 大佬们有办法吗
更多关于HarmonyOS鸿蒙Next中在showAssetsCreationDialog中保存动态图呢?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
测试使用 showAssetsCreationDialog 打开权限后,可以把Gif 写入相册,看GIF也正常可用呢,可参考官网排查下,https://developer.huawei.com/consumer/cn/doc/architecture-guides/tools-v1_2-ts_283-0000002429991637:
async example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, path: string) {
console.info('qts ShowAssetsCreationDialogDemo==' + fileUri.getUriFromPath(path));
try {
// 获取需要保存到媒体库的位于应用沙箱的图片/视频uri。
let srcFileUris: Array<string> = [
fileUri.getUriFromPath(path)// 实际场景请使用真实的uri。
];
let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [
{
title: 'test1', // 可选。
fileNameExtension: 'gif',
photoType: photoAccessHelper.PhotoType.IMAGE,
subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选。
}
];
let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);
console.info('qts showAssetsCreationDialog success, data is ' + desFileUris);
if (desFileUris.length > 0) {
const authorizedUri: string = desFileUris[0];
// 将沙箱图片写入授权uri(核心写操作)
const srcFd = await fs.open(path, fs.OpenMode.READ_ONLY);
const destFd = await fs.open(authorizedUri, fs.OpenMode.WRITE_ONLY);
await fs.copyFile(srcFd.fd, destFd.fd);
// 关闭文件描述符
fs.close(srcFd);
fs.close(destFd);
console.info('qts Image saved successfully');
} else {
console.error('qts User denied authorization');
}
} catch (err) {
console.error('qts showAssetsCreationDialog failed, errCode is ' + err.code + ', errMsg is ' + err.message);
}
}
更多关于HarmonyOS鸿蒙Next中在showAssetsCreationDialog中保存动态图呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
解决了 最后申请了写入相册权限搞定了。你给的这个代码我试过的 不行 动态图是其他方法。
权限怎么申请的,
在HarmonyOS Next中,使用showAssetsCreationDialog保存动态图时,需通过Image组件加载动态图资源,结合MediaLibrary媒体库API实现存储。调用getMediaLibrary获取媒体库实例,用createAsset方法指定资源类型为MediaType.IMAGE,并设置正确路径与参数完成保存。注意动态图格式需为系统支持的GIF或WebP等。
在HarmonyOS Next中,showAssetsCreationDialog 主要用于创建图片或视频资源,但当前版本不支持直接生成动态图(如GIF)。若需保存动态图到相册,建议通过以下方式实现:
- 使用媒体处理库:通过第三方或自定义库(如FFmpeg)将多张图片或视频帧合成为动态图,生成文件后保存到设备。
- 直接文件写入:将动态图数据写入应用沙箱路径,再通过
PhotoAccessHelper的createAsset方法添加到相册。示例代码:const photoAccessHelper = require('@ohos.file.photoAccessHelper'); const context = ...; // 获取应用上下文 const phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); // 假设动态图文件已生成在应用沙箱路径 let gifPath = '...'; // 动态图文件路径 let displayName = 'dynamic_image.gif'; await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, gifPath, displayName); - 结合平台能力:若Flutter侧有相关插件,可调用HarmonyOS原生接口处理生成和保存逻辑。
注意:动态图生成需自行处理编码和帧合成,确保文件格式符合相册要求(如GIF或MP4)。

