uni-app在纯血鸿蒙不支持plus时,申请权限应该如何改造一下?

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

uni-app在纯血鸿蒙不支持plus时,申请权限应该如何改造一下?

代码示例

我现在是这样写的:

// 检查是否开启麦克风权限
const checkRecordPermission = () => {
// #ifdef APP-PLUS
const recordPermission = plus.navigator.checkPermission('RECORD')
if (recordPermission != 'authorized') {
showModal('权限提醒', '为了您能够完整体验语音转文字功能,系统将会获取您的麦克风权限,是否前往开启【麦克风】权限?').then((res) => {
if (res.confirm) {
showLoading('跳转中...', true)
// 弹出提示框解释为何需要读写手机储存权限,引导用户打开设置页面开启
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
//直接进入应用列表的权限设置
var mIntent = new Intent('android.settings.APPLICATION_SETTINGS');
main.startActivity(mIntent);
hideLoading()
} else if (res.cancel) {
uni.showToast({
title: '未开启麦克风权限',
icon: 'none',
duration: 2200
});
return false;
}
})
} else {
return true;
}
// #endif
}

我看到社区里面说用uts开发,但是没找到应该具体怎么写,我应该怎么申请对应权限呢


更多关于uni-app在纯血鸿蒙不支持plus时,申请权限应该如何改造一下?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app在纯血鸿蒙不支持plus时,申请权限应该如何改造一下?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app针对纯血鸿蒙(即OpenHarmony)平台不支持plus API的情况下,申请权限的方式需要进行相应的改造。由于plus API是DCloud为H5+环境提供的扩展API,在纯血鸿蒙这类原生环境中无法直接使用,因此我们需要借助鸿蒙系统的原生API来实现权限申请。

以下是一个基本的代码案例,展示了如何在uni-app中通过改造,使用鸿蒙系统的原生API来申请权限(以存储权限为例):

  1. manifest.json中声明权限: 首先,你需要在manifest.json文件中声明你需要的权限。不过,这一步在纯血鸿蒙中可能不起作用,因为鸿蒙的权限管理更加严格,通常需要在运行时动态申请。
"mp-engine": {
    "permissions": {
        "ohos.permission.READ_EXTERNAL_STORAGE": {
            "desc": "读取外部存储权限"
        },
        "ohos.permission.WRITE_EXTERNAL_STORAGE": {
            "desc": "写入外部存储权限"
        }
    }
}

注意:上述JSON配置在纯血鸿蒙中可能不生效,具体请参考鸿蒙官方文档进行权限声明。

  1. 在页面中动态申请权限: 由于鸿蒙系统需要在运行时动态申请权限,因此你需要在代码中调用鸿蒙的API进行权限申请。这里假设你已经通过某种方式(如原生插件或JSI接口)在uni-app中暴露了鸿蒙的原生API。
// 假设已经通过某种方式引入了鸿蒙的oh模块
const oh = require('@ohos.multimedia.media'); // 示例,实际可能需要调整

function requestStoragePermission() {
    return new Promise((resolve, reject) => {
        if (oh.permission.checkSelfPermission('ohos.permission.WRITE_EXTERNAL_STORAGE') !== oh.permission.PERMISSION_GRANTED) {
            oh.permission.requestPermissionsFromUser([
                {
                    name: 'ohos.permission.READ_EXTERNAL_STORAGE',
                    reason: '需要读取外部存储以进行某些操作',
                },
                {
                    name: 'ohos.permission.WRITE_EXTERNAL_STORAGE',
                    reason: '需要写入外部存储以进行某些操作',
                }
            ]).then((permissions) => {
                const granted = permissions.every(perm => perm.granted);
                if (granted) {
                    resolve();
                } else {
                    reject(new Error('权限申请被拒绝'));
                }
            }).catch(err => {
                reject(err);
            });
        } else {
            resolve();
        }
    });
}

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

注意:上述代码仅为示例,实际使用时需要根据鸿蒙系统的API文档进行调整,并确保你已经正确地在uni-app中引入了鸿蒙的原生模块或API。由于uni-app官方可能未直接支持纯血鸿蒙,因此你可能需要借助第三方插件或自行封装JSI接口来实现这一功能。

回到顶部