目录

HarmonyOS媒体库相关权限申请及配置

问题现象

媒体开发过程中,媒体库受限开放权限应该如何申请?

背景知识

应用在访问数据或者执行操作时,需要评估该行为是否需要应用具备相关的权限。如果确认需要目标权限,则需要在应用安装包中申请目标权限,开发者可以依据下述流程图判断是否可以申请受限权限。

解决方案

  1. 媒体文件相关权限列表:

    权限

    权限内容

    可申请此权限的特殊场景与功能

    ohos.permission.SHORT_TERM_WRITE_IMAGEVIDEO

    短时授权,允许应用保存图片、视频到用户公共目录。

    应用无法使用安全保存控件,例如H5网页应用等。

    存在连续多次保存图片/视频的场景,无法使用保存确认弹框,一次保存多个图片/视频。

    ohos.permission.READ_IMAGEVIDEO

    允许读取用户公共目录的图片或视频文件。

    应用需要克隆、备份或同步图片/视频类文件。

    ohos.permission.WRITE_IMAGEVIDEO

    允许修改用户公共目录的图片或视频文件。

    应用需要克隆、备份或同步图片/视频类文件。

    应用内包含拍照和录制场景,且应用属于典型的拍照应用。无法使用安全控件或授权弹窗保存图片。

    ohos.permission.MEDIA_LOCATION

    允许应用访问用户媒体文件中的地理位置信息。

    /

  2. 权限申请原因需要具体阐述基于什么应用场景才需要申请相应权限,如果缺失该权限会导致哪些业务场景无法闭环。开发者需要从权限使用的业务场景出发进行原因描述,而非强调功能设计方案,具体申请原因可参考:
    • SHORT_TERM_WRITE_IMAGEVIDEO:需要具体阐述为什么不能使用保存控件和授权弹窗的方式,应用内存在怎样的用户使用场景需要在短时间内保存多张图片,使用弹窗授权方案多次弹窗影响用户体验。
    • ohos.permission.READ_IMAGEVIDEO:应用存在克隆备份场景,需要在不同设备之间同步媒体文件,无法通过PhotoPicker访问媒体文件。
    • ohos.permission.WRITE_IMAGEVIDEO:
      • 应用存在克隆备份场景,需要将其他设备/云端的媒体文件数据同步到本地;
      • 应用是拍照类的应用,存在需要在拍照、录制视频之后直接存入图库的场景;
      • 由于使用了不支持安全控件的开源框架,无法使用安全控件,同时应用内存在某些使用场景需要对媒体文件进行修改。
    • MEDIA_LOCATION:基于某个具体的场景,需要获取到应用图片中的位置信息。
  1. 权限审批完成后,在HarmonyOS 开发者中心侧申请Profile文件用于后续的应用签名信息配置,在module.json5配置文件的requestPermissions标签中声明权限,权限申请相关配置参数如表:

属性

含义

数据类型

name

使用的权限名称。

string

reason

申请权限的原因。

string

usedScene

权限使用的场景,该字段用于应用上架校验。包括abilities和when两个子项。abilities是使用权限的UIAbility或者ExtensionAbility组件的名称;when是权限调用时机。

对象

  1. 在UIAbility中向用户申请授权,调用requestPermissionsFromUser拉起弹框请求用户授权。如果用户拒绝授权,将无法再次拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。或是调用requestPermissionOnSetting,拉起权限设置弹框,引导用户授权。需要注意的是,在进行权限申请之前,需要先检查当前应用程序是否已经被授予权限。参考向用户申请授权。

常见FAQ

Q:如果用户已拒绝权限,再次请求权限需要跳转设置页面,那这个跳转路径是什么?

A:跳转系统设置的各级页面Want参数需指定bundleName与abilityName,如需跳转设置相关子页面,除了指定bundleName与abilityName外,通常还需要填写对应uri与parameters,参考跳转到系统设置。

Q:申请受限权限的克隆,备份或同步的场景是哪些?

A:克隆的场景,如换机场景;备份或同步的场景,如云端备份、同步。

总结

受限权限需要在应用市场申请权限,权限申请流程繁琐。在开发测试阶段建议使用不需要权限的替代方案,常见情况如保存图片到相册可以使用安全控件或弹窗授权进行保存,相册管理可以使用photoAccessHelper进行相册图片选择等。