HarmonyOS 鸿蒙Next 相册读写权限

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 相册读写权限

问题1、在业务场景保存图片的时候,需要申请ohos.permission.WRITE_IMAGEVIDEO写相册的权限,权限允许后可以正常保存图片,但是此时在最新的鸿蒙系统.31中,设置->应用元服务->中对应的app系统权限设置里面‘图片和视频’权限是关闭的,只有在申请ohos.permission.READ_IMAGEVIDEO读相册的权限这个按钮才能打开,业务中有个设置系统权限的菜单,此时会与检测不一致,检测写的权限已申请,但是设置中是关闭的。  问题2、拍照裁剪头像的时候,拍照获取URI无法直接在Image控件中直接展示,需要申请ohos.permission.READ_IMAGEVIDEO读相册的权限,此时与问题一类似,同时有无方法不申请读相册权限可以直接展示,拍照目前用的是Want拉起的相机


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

3 回复

可以通过调用这个接口

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-photoaccesshelper-V5#photoviewpicker

通过picker拉起图库选择图片,不需要进行授权(应用是有界面的,无界面无法拉起图库)无应用限制的,三方应用都可以调用

无需设置额外的权限就可以访问到手机相册,参考demo:

import { BusinessError } from ‘@ohos.base’;

import photoAccessHelper from ‘@ohos.file.photoAccessHelper’;

@Entry

@Component

struct ss{

  build() {

    Button(‘访问手机相册’).onClick(()=>{

      try {

        let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();

        PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;

        PhotoSelectOptions.maxSelectNumber = 5;

        let photoPicker = new photoAccessHelper.PhotoViewPicker();

        photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult: photoAccessHelper.PhotoSelectResult) => {

          console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ’ + JSON.stringify(PhotoSelectResult));

        }).catch((err: BusinessError) => {

          console.error('PhotoViewPicker.select failed with err: ’ + JSON.stringify(err));

        });

      } catch (error) {

        let err: BusinessError = error as BusinessError;

        console.error('PhotoViewPicker failed with err: ’ + JSON.stringify(err));

      }

    })

  }

}
可以不用申请权限,参考如下demo试下:

import picker from '@ohos.multimedia.cameraPicker';

import camera from '@ohos.multimedia.camera';

import common from '@ohos.app.ability.common';

import { BusinessError } from '@ohos.base';

@Entry

@Component

struct Index {

  mContext = getContext(this) as common.Context;

  async demo() {

    try {

      let pickerProfile: picker.PickerProfile = {

        cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK

      };

      let pickerResult: picker.PickerResult = await picker.pick(this.mContext,

        [picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO], pickerProfile);

      console.log("the pick pickerResult is:" + JSON.stringify(pickerResult));

    } catch (error) {

      let err = error as BusinessError;

      console.error(`the pick call failed. error code: ${err.code}`);

    }

  }

  @State message: string = 'Hello World';

  build() {

    Row() {

      Column() {

        Button(this.message)

          .onClick(()=>{

            this.demo()

          })

      }

      .width('100%')

    }

    .height('100%')

  }

}

保存图片也可以不申请ohos.permission.WRITE_IMAGEVIDEO的权限,参考链接https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/savebutton-0000001820999677-V5

您可以参考这边的codelab使用PhotoViewPicker保存图片到图库

https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_NEXT-FilesManger

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


photoAccessHelper.PhotoSelectResult的uri,元服务不支持getAssets获取图片

在HarmonyOS 鸿蒙Next系统中,相册读写权限的管理与Android系统有所不同,但同样注重用户隐私保护。以下是如何在HarmonyOS应用中请求相册读写权限的基本步骤:

  1. 配置权限声明: 在应用的config.json文件中,需要声明对相册读写权限的需求。添加以下配置:

    "module": {
      "package": "com.example.yourapp",
      "reqPermissions": [
        "ohos.permission.READ_MEDIA",
        "ohos.permission.WRITE_MEDIA"
      ]
    }
    
  2. 动态请求权限: 在运行时,应用需要动态请求用户授予相册读写权限。可以使用PermissionManagerPermissionRequest类来实现:

    var permissionManager = PermissionManager.create();
    var permissions = [
      "ohos.permission.READ_MEDIA",
      "ohos.permission.WRITE_MEDIA"
    ];
    permissionManager.requestPermissionsFromUser(permissions, (permissions, grantResults) => {
      // 处理权限请求结果
    });
    

    注意:此处示例代码框架与Java类似,但实际代码应使用HarmonyOS的ArkUI或JS扩展API。

  3. 处理权限结果: 在回调中检查grantResults,以确定用户是否授予了所需权限。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部