HarmonyOS鸿蒙Next中用的flutter无法使用save_button,申请读写相册权限基本申请不了,有没有其他办法能够完成需求?showAssetsCreationDialog可以保存图片和视频到相册,但是无法生成动态图保存到相册

HarmonyOS鸿蒙Next中用的flutter无法使用save_button,申请读写相册权限基本申请不了,有没有其他办法能够完成需求?showAssetsCreationDialog可以保存图片和视频到相册,但是无法生成动态图保存到相册 【问题描述】:用jpg和mp4生成动态图保存到相册. 由于用的flutter. 无法使用save_button. 申请读写相册权限基本申请不了. 有没有其他办法能够完成需求. showAssetsCreationDialog可以保存图片和视频到相册, 但是无法办法生成动态图保存到相册 有没有其他更好的方案来解决这个问题 (权限申请没有成功)

【问题现象】:13900012 without medialibrary permission

【版本信息】:IDE: DevEco Studio 6.0.0 Release. Flutter分支ohos版本: 3.22.1-ohos-1.0.4 手机系统: 鸿蒙next 5.1.0 api版本: 12

【尝试解决方案】:如下代码

async onMethodCall(call: MethodCall, result: MethodResult): Promise<void> {

    if (call.method == "makeLive") {

        const covertImgPath = call.argument("covertImgPath") as string;

        const videoPath = call.argument("videoPath") as string;

        const context = this.binding?.getAbility().context;

        if (context == null) {

            return result.error("-1", "context is null", null);

        }

        try {

            let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);

            let srcFileUris: Array<string> = [fileUri.getUriFromPath(covertImgPath), fileUri.getUriFromPath(videoPath)];

            let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [

                {

                    fileNameExtension: "jpg",

                    photoType: photoAccessHelper.PhotoType.IMAGE,

                    subtype: photoAccessHelper.PhotoSubtype.MOVING_PHOTO

                },

                {

                    fileNameExtension: "mp4",

                    photoType: photoAccessHelper.PhotoType.VIDEO

                }

            ];

            let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);

            let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoAccessHelper.PhotoType.IMAGE, "jpg", {

                subtype: photoAccessHelper.PhotoSubtype.MOVING_PHOTO

            });

            assetChangeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, srcFileUris[0]);

            assetChangeRequest.addResource(photoAccessHelper.ResourceType.VIDEO_RESOURCE, srcFileUris[1]);

            await phAccessHelper.applyChanges(assetChangeRequest);

            return result.success(assetChangeRequest.getAsset().uri)

        } catch (err) {

            result.success(`${err.code} ${err.message}`);

        }

    } else {

        result.notImplemented();

    }

}

更多关于HarmonyOS鸿蒙Next中用的flutter无法使用save_button,申请读写相册权限基本申请不了,有没有其他办法能够完成需求?showAssetsCreationDialog可以保存图片和视频到相册,但是无法生成动态图保存到相册的实战教程也可以访问 https://www.itying.com/category-92-b0.html

4 回复

保存动图,你需要将 fileNameExtension,设置为对应的类型。

比如 fileNameExtension: ‘gif’ ,简单处理可以使用图片url上的扩展名。

如果是需要更精确的类型,可以读取图片的前几个字节来确定。

更多关于HarmonyOS鸿蒙Next中用的flutter无法使用save_button,申请读写相册权限基本申请不了,有没有其他办法能够完成需求?showAssetsCreationDialog可以保存图片和视频到相册,但是无法生成动态图保存到相册的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


现在权限申请已经被拒了 还有什么好的方案吗,

在HarmonyOS Next中,Flutter的save_button不可用且读写相册权限受限时,可考虑使用鸿蒙原生媒体库管理接口。通过@ohos.file.photoAccessHelper模块的PhotoAccessHelper功能,直接调用createAsset方法创建并保存动态图资源。该方法支持生成GIF等动态格式,无需依赖Flutter插件或额外权限申请。具体实现需在鸿蒙开发环境中配置相应依赖,并遵循鸿蒙API文档调用流程。

在HarmonyOS Next中,使用Flutter开发时遇到相册权限申请问题确实常见。针对动态图保存需求,可以尝试以下方案:

  1. 使用@ohos.file.fs文件系统API直接操作文件:
import fs from '@ohos.file.fs';

// 将生成的动态图保存到应用沙箱目录
let destPath = context.filesDir + '/generated_live_photo.jpg';
await fs.copyFile(covertImgPath, destPath);
  1. 通过@ohos.file.picker选择器保存:
import picker from '@ohos.file.picker';

// 使用文件选择器保存到用户选择的位置
let photoSaveOptions = new picker.PhotoSaveOptions();
photoSaveOptions.newFileNames = ['live_photo.jpg'];
let saveUri = await picker.save(photoSaveOptions);
  1. 检查权限配置确保在module.json5中正确声明:
"requestPermissions": [
  {
    "name": "ohos.permission.READ_IMAGEVIDEO",
    "reason": "$string:reason"
  }
]

当前代码中showAssetsCreationDialog确实不支持动态图创建,建议优先考虑文件系统API方案,避免直接依赖相册权限。这种方法绕过了权限限制,同时能保证文件正常存储。

回到顶部