HarmonyOS 鸿蒙Next中关于权限ohos.permission.READ_IMAGEVIDEO

HarmonyOS 鸿蒙Next中关于权限ohos.permission.READ_IMAGEVIDEO

let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
// 配置查询条件,使用PhotoViewPicker选择图片返回的uri进行查询
predicates.equalTo('uri', videoUris[0]);
let fetchOption: photoAccessHelper.FetchOptions = {
  fetchColumns: [photoAccessHelper.PhotoKeys.WIDTH, photoAccessHelper.PhotoKeys.HEIGHT,
    photoAccessHelper.PhotoKeys.TITLE, photoAccessHelper.PhotoKeys.SIZE, photoAccessHelper.PhotoKeys.DURATION],
  predicates: predicates
};

let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption);

// 得到uri对应的PhotoAsset对象,读取文件的部分信息
const asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
// 必须确保fetchOptions中包含SIZE和DURATION字段(重要!)
const rawSize = asset.get(photoAccessHelper.PhotoKeys.SIZE); // 单位:字节
const rawDuration = asset.get(photoAccessHelper.PhotoKeys.DURATION); // 单位:毫秒

我这边通过photoAccessHelper获取图片或视频的asset,提示我需要申请ohos.permission.READ_IMAGEVIDEO权限

我现在的问题是,如果我通过photoAccessHelper获取图片或视频的路径path之后,复制一份到沙箱环境,使用沙箱环境的图片或视频路径去获取图片或视频的asset,这种情况是否也需要申请权限ohos.permission.READ_IMAGEVIDEO


更多关于HarmonyOS 鸿蒙Next中关于权限ohos.permission.READ_IMAGEVIDEO的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

尊敬的开发者您好,

使用phAccessHelper.getAssets根据指定uri获取资源时,该方式是获取媒体库图片和视频资源,uri必须为媒体文件uri,不能传沙箱路径。

更多关于HarmonyOS 鸿蒙Next中关于权限ohos.permission.READ_IMAGEVIDEO的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


同样的问题,我也想选择图片后,把他复制到沙箱一份,但是没有权限的话,拷贝的时候提示源路径不存在,就没法往目标路径拷贝

在HarmonyOS Next中,ohos.permission.READ_IMAGEVIDEO权限用于允许应用读取用户设备上的图片和视频文件。该权限属于存储权限组,需要在应用的配置文件中声明,并遵循用户授权机制。系统会根据权限级别和用户操作进行动态管理,确保数据访问安全。应用需在访问媒体库前申请此权限,由用户决定是否授予。权限管理基于最小权限原则,保障用户隐私。

在HarmonyOS Next中,即使将媒体文件复制到应用沙箱环境,通过photoAccessHelper访问这些文件时,仍然需要申请ohos.permission.READ_IMAGEVIDEO权限。这是因为photoAccessHelper属于系统媒体库管理接口,其权限校验机制不区分文件存储位置,只要通过该接口访问媒体资源就会触发权限检查。

具体来说:

  1. photoAccessHelper的设计初衷是统一管理设备上的媒体资源
  2. 权限校验发生在API调用层面,而非文件存储层面
  3. 即使用户文件已复制到沙箱,通过photoAccessHelper.getAssets()等方法访问时,系统仍会校验READ_IMAGEVIDEO权限

替代方案建议:

如果只是需要处理沙箱内的媒体文件,建议直接使用文件系统API(如fs模块)进行操作,这样可以避免媒体库权限的依赖。但需要注意,这种方式将无法使用photoAccessHelper提供的媒体文件元数据查询等高级功能。

权限申请仍需在config.json中声明,并在运行时通过abilityAccessCtrl动态申请。

回到顶部