y_曦
y_曦
  • 发布:2024-12-17 11:56
  • 更新:2024-12-17 22:10
  • 阅读:93

【报Bug】华为HarmonyOS4.2.0.155系统申请权限的一系列BUG

分类:鸿蒙Next

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 15.0 (24A335)

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS NEXT Developer Beta1

手机厂商: 华为

手机机型: HUAWEI P60

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: CLI

CLI版本号: Vue3/Vite版

操作步骤:

1、在APP.vue中使用uni.createRequestPermissionListener监听权限申请,点击按钮使用plus.android.requestPermissions调用系统权限,弹出申请权限弹窗,点击拒绝,plus.android.requestPermissions的返回结果deniedAlways中有拒绝的权限


function requestAndroidPermission(permissionName) {  
  const changeMap = {  
    摄像头权限: ["android.permission.CAMERA"],  
    相册权限: ["android.permission.READ_MEDIA_IMAGES"],  
    麦克风权限: ["android.permission.RECORD_AUDIO"],  
    存储权限: ["android.permission.WRITE_EXTERNAL_STORAGE"],  
  };  
  return new Promise((resolve) => {  
    plus.android.requestPermissions(  
      changeMap[permissionName], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装  
      function (resultObj) {  
        let result = 0;  
        for (let i = 0; i < resultObj.granted.length; i++) {  
          let grantedPermission = resultObj.granted[i];  
          console.log("已获取的权限:" + grantedPermission);  
          result = 1;  
        }  
        for (let i = 0; i < resultObj.deniedPresent.length; i++) {  
          let deniedPresentPermission = resultObj.deniedPresent[i];  
          console.log("拒绝本次申请的权限:" + deniedPresentPermission);  
          result = 0;  
        }  
        for (let i = 0; i < resultObj.deniedAlways.length; i++) {  
          let deniedAlwaysPermission = resultObj.deniedAlways[i];  
          console.log("永久拒绝申请的权限:" + deniedAlwaysPermission);  
          result = -1;  
        }  
        resolve(result);  
      },  
      function (error) {  
        resolve({  
          code: error.code,  
          message: error.message,  
        });  
      }  
    );  
  });  
}```  
2、在步骤1的基础上,再次点击按钮使用plus.android.requestPermissions调用系统权限,不会弹出权限申请弹窗,并且在uni.createRequestPermissionListener的回调函数onRequest、onConfirm、onComplete中都会有返回值  
3、使用chooseImageAPI上传图片,sourceType设置为["album"],此时点击选择相册,uni.createRequestPermissionListener的回调函数onRequest、onConfirm中都返回["android.permission.WRITE_EXTERNAL_STORAGE"]

预期结果:

1、拒绝一次之后可以再次申请,第二次拒绝之后才是永久拒绝
2、永久拒绝的权限再次申请时uni.createRequestPermissionListener的回调函数onConfirm中不应该有返回值
3、使用chooseImageAPI上传图片时,使用相册,申请的权限应该是["android.permission.READ_MEDIA_IMAGES"]

实际结果:

1、权限拒绝一次之后就永久拒绝
2、永久拒绝的权限再次申请时uni.createRequestPermissionListener的回调函数onConfirm中有返回值
3、使用chooseImageAPI上传图片时,使用相册,申请的权限是["android.permission.WRITE_EXTERNAL_STORAGE"]

bug描述:

  1. 使用plus.android.requestPermissions调用系统权限时,拒绝一次之后就永久拒绝
  2. 权限永久拒绝以后,再次使用plus.android.requestPermissions调用权限,会执行权限监听createRequestPermissionListener的onConfirm回调
  3. 调用chooseImageAPI时,sourceType设置为["album", "camera"]时,点击相册只会调用"android.permission.WRITE_EXTERNAL_STORAGE"权限
2024-12-17 11:56 负责人:无 分享
已邀请:
DCloud_heavensoft

DCloud_heavensoft

鸿蒙next上没有plus.android.requestPermissions啊

  • y_曦 (作者)

    那第三个问题呢,chooseImageAPIsourceType设置为["album", "camera"]时,点击相册是怎么调用权限的,为什么权限监听里只返回"android.permission.WRITE_EXTERNAL_STORAGE"

    2024-12-18 10:04

  • y_曦 (作者)

    那鸿蒙next怎么调用系统权限

    2024-12-18 10:06

  • y_曦 (作者)

    HarmonyOS4.2.0.155 不属于鸿蒙next吧 可能是我选择的有问题,因为我在选项里没有找到对应的系统

    2024-12-18 10:27

要回复问题请先登录注册