uni-app 华为HarmonyOS4.2.0.155系统申请权限的一系列BUG

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 华为HarmonyOS4.2.0.155系统申请权限的一系列BUG

开发环境 版本号 项目创建方式
Mac 15.0 (24A335) CLI

产品分类:uniapp/App

PC开发环境操作系统:Mac

手机系统:HarmonyOS NEXT

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

手机厂商:华为

手机机型:HUAWEI P60

页面类型:vue

vue版本:vue3

打包方式:云端

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,  
        });  
      }  
    );  
  });  
}

更多关于uni-app 华为HarmonyOS4.2.0.155系统申请权限的一系列BUG的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

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

更多关于uni-app 华为HarmonyOS4.2.0.155系统申请权限的一系列BUG的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


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

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

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

针对uni-app在华为HarmonyOS 4.2.0.155系统上申请权限时遇到的一系列BUG,这里提供一个基于uni-app框架的权限申请示例代码,并附带一些可能的解决思路,帮助你更好地应对这些问题。请注意,由于具体BUG情况未知,以下代码和思路更多是基于一般权限申请的通用做法。

示例代码

首先,确保你的manifest.json文件中已经声明了需要的权限,例如:

"mp-weex": {
    "app-plus": {
        "distribute": {
            "android": {
                "permissions": [
                    "android.permission.CAMERA",
                    "android.permission.READ_EXTERNAL_STORAGE",
                    // 其他需要的权限
                ]
            }
        }
    }
}

在uni-app中,你可以使用uni.getSettinguni.authorize方法来检查和申请权限。以下是一个简单的权限申请流程示例:

function requestPermission(permission) {
    return new Promise((resolve, reject) => {
        uni.getSetting({
            success: (res) => {
                if (!res.authSetting[permission]) {
                    uni.authorize({
                        scope: permission,
                        success: () => {
                            resolve(true);
                        },
                        fail: () => {
                            // 用户拒绝授权
                            uni.showModal({
                                title: '提示',
                                content: '需要您的授权才能使用此功能',
                                success: (res) => {
                                    if (res.confirm) {
                                        // 引导用户去设置中授权
                                        uni.openSetting({
                                            success: (settingRes) => {
                                                if (settingRes.authSetting[permission]) {
                                                    resolve(true);
                                                } else {
                                                    reject(new Error('用户拒绝授权'));
                                                }
                                            },
                                            fail: (err) => {
                                                reject(err);
                                            }
                                        });
                                    } else {
                                        reject(new Error('用户取消'));
                                    }
                                }
                            });
                        }
                    });
                } else {
                    resolve(true);
                }
            },
            fail: (err) => {
                reject(err);
            }
        });
    });
}

// 使用示例
requestPermission('scope.camera').then(() => {
    console.log('权限申请成功');
}).catch((err) => {
    console.error('权限申请失败', err);
});

解决思路

  1. 检查权限声明:确保manifest.json中声明的权限与实际申请的权限一致。
  2. 系统兼容性:检查uni-app和HarmonyOS的兼容性文档,看是否有已知的权限申请问题。
  3. 错误处理:增强错误处理逻辑,提供用户友好的反馈和引导。
  4. 日志记录:在申请权限的过程中添加日志记录,帮助定位问题。
  5. 更新uni-app框架:确保你使用的uni-app框架是最新版本,以修复可能的BUG。

希望这些信息能帮助你解决在华为HarmonyOS 4.2.0.155系统上申请权限时遇到的问题。

回到顶部