HarmonyOS鸿蒙Next中上次申请受限权限未通过,提供了替代方法,但方法中代码报错没有权限

HarmonyOS鸿蒙Next中上次申请受限权限未通过,提供了替代方法,但方法中代码报错没有权限 我是用的方法是https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-savebutton-V5#%E4%BD%BF%E7%94%A8%E5%BC%B9%E7%AA%97%E6%8E%88%E6%9D%83%E4%BF%9D%E5%AD%98%E5%AA%92%E4%BD%93%E5%BA%93%E8%B5%84%E6%BA%90里的,目前有no premission的报错,怎么解决

cke_1404.png

还有个问题就是我保存到相册目前是空白


更多关于HarmonyOS鸿蒙Next中上次申请受限权限未通过,提供了替代方法,但方法中代码报错没有权限的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者你好,使用savebutton要注意约束与限制,参考约束与限制会导致使用savebutton时导致授权失败的问题,关于空白的问题,看了下代码是因为没有使用图片编码器imagepacker,使用编码器之后已经能正常保存,参考:使用弹窗授权保存媒体库资源

更多关于HarmonyOS鸿蒙Next中上次申请受限权限未通过,提供了替代方法,但方法中代码报错没有权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,上次申请受限权限未通过,系统会提供替代方法。若替代方法中的代码报错提示没有权限,通常是因为替代方法本身仍需特定权限支持,但该权限未在配置文件中声明或未通过动态申请。请检查代码中使用的API所需权限,并在module.json5文件中正确声明。若涉及敏感权限,需确保用户已授权。

根据你提供的文档链接和截图,你遇到的是HarmonyOS Next中媒体库权限申请和保存资源的问题。

1. 关于“no permission”报错

文档中“使用弹窗授权保存媒体库资源”的方法,其核心是调用requestPermissionsFromUser来动态申请权限。出现“no permission”报错,通常有以下几个原因:

  • 权限未在module.json5中声明:请检查你的项目src/main/module.json5文件的requestPermissions字段,确保已正确声明ohos.permission.READ_IMAGEVIDEOohos.permission.WRITE_IMAGEVIDEO权限。这是前置条件。
  • 授权弹窗被用户拒绝requestPermissionsFromUser会弹出系统授权弹窗。如果用户点击了“拒绝”,后续操作自然会报错。你的代码需要在requestPermissionsFromUser的回调中处理用户拒绝授权的情况,例如给出友好提示并引导用户去设置中手动开启权限。
  • 代码执行时序问题:确保你在执行保存操作(如photoAccessHelper.getPhotoAccessHelper().createAsset)之前,已经成功获得了权限授权。你的保存代码应该放在权限申请成功的回调分支里执行,或者通过一个标志位来确保权限已获取。
  • 权限作用域问题:HarmonyOS Next对权限管理更加严格。请确认你申请和使用的权限作用域(when: inusewhen: always)与你的业务场景(前台/后台)匹配。保存到相册通常需要when: always

2. 关于保存到相册为空白

保存后相册显示空白,通常是因为保存的“资源”本身是空的,或者保存路径/方式有误。

  • 检查资源文件:请确认你传递给createAsset方法的image.Uint8Array数据是有效的、非空的图片二进制数据。你可以先尝试保存一个已知有效的、小的图片文件进行测试。
  • 检查PhotoAsset创建结果createAsset方法返回一个PhotoAsset对象。请通过日志打印这个对象,或检查其是否为空,以确认资源是否真的被创建成功。
  • 检查文件后缀名:在调用createAsset时,需要提供正确的文件显示名(displayName)和相对路径(relativePath)。确保displayName包含正确的后缀(如.jpg, .png),系统需要根据后缀识别文件类型。

建议的排查步骤

  1. 核对配置:再次确认module.json5中的权限声明无误。
  2. 检查回调逻辑:在requestPermissionsFromUser的完整回调中,详细打印每个分支(授权结果)的日志,确认你的代码确实走到了授权成功的分支。
  3. 分离测试:先写一个最简单的测试代码,仅包含权限申请和保存一个内置的、小的图片资源(比如一个base64编码的像素图),排除业务逻辑复杂度的干扰。
  4. 查看日志:使用DevEco Studio的Log窗口,过滤查看更详细的系统级错误日志,可能包含更具体的失败原因。

根据你截图中的代码片段,问题很可能出在权限申请的回调处理逻辑保存资源的二进制数据上。请重点检查这两部分。

回到顶部