HarmonyOS 鸿蒙Next PermissionName: ohos.permission.READ_IMAGEVIDEO Install Failed: error: failed to install bundle.

HarmonyOS 鸿蒙Next PermissionName: ohos.permission.READ_IMAGEVIDEO Install Failed: error: failed to install bundle. Install Failed: error: failed to install bundle.

code:9568289

error: install failed due to grant request permissions failed.

PermissionName: ohos.permission.READ_IMAGEVIDEO

ohos.permission.READ_IMAGEVIDEO是受限权限?ACL?


更多关于HarmonyOS 鸿蒙Next PermissionName: ohos.permission.READ_IMAGEVIDEO Install Failed: error: failed to install bundle.的实战教程也可以访问 https://www.itying.com/category-93-b0.html

13 回复

你用了ohos.permission.READ_IMAGEVIDEO这个权限,但是你的profile中没有这个权限,所以出错。

解决方法就是申请ohos.permission.READ_IMAGEVIDEO这个权限,一般情况下是申请不到的。

文档:受限开放权限-应用权限列表-应用权限管控-程序访问控制-安全-系统

更多关于HarmonyOS 鸿蒙Next PermissionName: ohos.permission.READ_IMAGEVIDEO Install Failed: error: failed to install bundle.的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


const writeLen = fs.writeSync(destFile.fd, buffer, {
        offset: 0,
        length: buffer.byteLength
});

writeSync第二个参数是ArrayBuffer | string,不是Uint8Array。

我现在用photoViewPicker选择照片,然后复制到沙箱进行操作。理论上应该是不需要申请权限,但总是报139000020错误

你把相关代码贴出来,才能分析哪里出问题

fileIo有现成的copyFile方法的。

//检查文件夹是否存在,不存在 递归创建多级文件夹
createFolder(dirPath:string) {
    // 首先判断文件夹是否存在
    let isExist = false;
    try {
      isExist = fileIo.accessSync(dirPath, fileIo.AccessModeType.EXIST);
      if (isExist) {
        console.info('文件夹已存在');
        return;
      }
    } catch (error) {
      // TODO: Implement error handling.
    }
    // 创建文件夹 recursive参数为true时可递归创建多级目录
    fileIo.mkdir(dirPath, true ).then(() => {
      console.info('mkdir succeed');
    }).catch((err: BusinessError) => {
      console.error(`mkdir failed. error message: ${err.message}, error code: ${err.code}`);
    });
  }

  //生成沙箱文件路径
  wrapFilePath(context:Context):string{
    let dirPath = context.filesDir + '/xxxx';//改成自己项目的沙箱目录
    this.createFolder(dirPath);
    let fileName = `${new Date().getTime()}`;
    let filePath = dirPath + `/${fileName}.jpg`;//后缀可以根据选择的图片来
    return filePath;
  }

  //从相册选择图片,并复制到沙箱
  async getPhotoPickerResult(context: Context): Promise<string> {
    let photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
    photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    photoSelectOptions.maxSelectNumber = 1; // 选择一张图片
    let photoPicker = new photoAccessHelper.PhotoViewPicker();
    let photoUri = '';
    try {
      let result = await photoPicker.select(photoSelectOptions);
      let uri = result.photoUris[0];
      try {
        let file = fileIo.openSync(uri, fileIo.OpenMode.READ_ONLY);
        let filePath = this.wrapFilePath(context);
        fileIo.copyFileSync(file.fd, filePath);
        fileIo.close(file);
        // 沙箱路径
        photoUri = fileUri.getUriFromPath(filePath);
      } catch (error) {
        // TODO: Implement error handling.
      }
      console.info(`Sandbox uri: ${photoUri}`);
    } catch (error) {
      // TODO: Implement error handling.
    }
    return photoUri;
}

已解决

用安全组件吧,这个申请太麻烦

如果只是让用户主动选图,然后把选中的图片复制到应用沙箱,优先不要声明和申请 ohos.permission.READ_IMAGEVIDEO。官方相册接口里也说明,通过 picker 方式请求图片/视频资源时,不需要申请这个权限。

你现在的安装失败 9568289 / grant request permissions failed / READ_IMAGEVIDEO,大概率就是因为包里声明了这个相册读取权限,但应用没有对应的权限授权/ACL 条件。先把 module.json5 里的 READ_IMAGEVIDEO 声明和运行时申请都去掉,再用 PhotoViewPicker.select() 返回的 photoUris 处理。

复制到沙箱时注意几点:源路径用 picker 返回的 uri 原样传给 fileIo.openSync(srcUri);目标文件建议放 context.cacheDircontext.filesDir,open 时带 READ_WRITE | CREATE;复制完成后关闭源/目标 fd;不要把 picker 返回的 uri 手动转换成普通本地路径。

只有需要读取整库、后台批量扫描相册等非用户单次选择场景时,才考虑 READ_IMAGEVIDEO,并按受限权限/ACL 和上架审核要求准备真实使用场景说明。

最开始是没有申请权限的,总是报错139000020。后面尝试了一下申请READ_IMAGEVIDEO权限。理论上说我的场景是不需要申请权限的。通过photoviewpicker选择照片,复制到沙盒目录,然后对沙盒目录的文件进行处理

文档里不是写了吗?查一下。

安装失败原因:ohos.permission.READ_IMAGEVIDEO 在 HarmonyOS Next 中属于受限权限,需在 module.json5 中以正确格式声明,且应用签名证书需具备该权限的授权。若未满足,系统将阻止安装。请检查 module.json5 中权限声明字段的拼写与层级,并确认签名证书已包含该权限。

ohos.permission.READ_IMAGEVIDEO 属于受限权限(ACL权限),无法直接使用。如果应用未在 AppGallery Connect 中申请该权限的 ACL 授权,安装时就会报错 9568289 并提示 grant request permissions failed
解决方式:登录 AGC,在“我的项目” -> 选择应用 -> “用户与访问” -> “权限管理” 中申请 ohos.permission.READ_IMAGEVIDEO 的 ACL,审核通过后重新下载包含该权限的签名文件(p7b),再打包安装即可。同时确认 module.json5requestPermissions 中已正确声明该权限。

回到顶部