利用Native.js获取当前App的授权状态,可打开App的授权设置界面,这里使用已封装好的permission.js插件,实现提示用户授权情况及设置功能。
插件下载地址:App权限判断和提示 - DCloud 插件市场
一、使用方法
1.下载插件并存放到项目目录下,比如:js_sdk/wa-permission/permisson.js
2.在页面中引入js模块:
import permission from '@/js_jdk/wa-permission/permission.js'
3.调用模块的方法
//判断IOS上是否给予位置权限,有权限返回true,否则返回false
permission.judgeIosPermission('location');
二、IOS设备上当前App是否有某项权限
方法1:Bool permission.judgeIosPermission(String permissionID)
参数说明:
参数名 | 类型 | 必填 | 说明 | permissionID | String | 是 | ios权限名称,值域清单如下列表 |
permissionID值域清单
参数名 | 说明? | location | 位置 | push | 推送(限IOS,注意Android上推送并不是一个权限) | camera | 摄像头 | photoLibrary | 相册 | record | 麦克风 | contact | 通讯录 | calendar | 日历 | memo | 备忘录 |
示例:
//判断IOS上是否给予位置权限,有权限返回true,否则返回false
permission.judgeIosPermission('location');
三、Android设备上当前App是否有某个权限
方法2:await Number permission.requestAndroidPermission(String permissionID)
注意:Android是动态权限,请求权限状态时会触发弹框访问是否赋权(如果已经同意或永久禁止则不会访问),所以必须使用异步方式来处理)
参数说明
参数名 | 类型 | 必填 | 说明 | permissionID | String | 是 | Android权限名称,值域清单如下表 |
permissionId值域清单
参数名 | 说明 | android.permission.ACCESS_FINE_LOCATION | 位置权限 | android.permission.ACCESS_COARSE_LOCATION | 模糊位置权限(蓝牙\ble依赖) | android.permission.CAMERA | 摄像头权限 | android.permission.READ_EXTERNAL_STORAGE | 外部存储(含相册)读取权限 | android.permission.WRITE_EXTERNAL_STORAGE | 外部存储(含相册)定入权限 | android.permission.RECORD_AUDIO | 麦克风权限 | android.permission.READ_CONTACTS | 通讯录读取权限 | android.permission.WRITE_CONTACTS | 通讯录写入权限? | android.permission.READ_CALENDAR | 日历读取权限 | android.permission.WRITE_CALENDAR | 日历写入权限 | android.permission.READ_SMS | 短信读取权限 | android.permission.SEND_SMS | 短信发送权限 | android.permission.RECEIVE_SMS | 接收新短信权限 | android.permission.READ_PHONE_STATE | 获取手机识别码等信息权限 | android.permission.CALL_PHONE | 拨打电话权限 | android.permission.READ_CALL_LOG | 获取通话记录权限 |
这里支持Android所有android.permission的值,更多值可参考Android开发文档
返回值值域说明
permission.requestAndroidPermission(permissionID) 返回值为数字,包括-1、0、1这三个值。
返回值 | 说明 | 1 | 已获取授权 | 0 | 未获取授权 | -1 | 被永久拒绝授权 |
示例:
// vue的method里编写如下代码
async requestAndroidPermission(permisionID) {
var result = await permision.requestAndroidPermission(permisionID)
var strStatus
if (result == 1) {
strStatus = "已获得授权"
} else if (result == 0) {
strStatus = "未获得授权"
} else {
strStatus = "被永久拒绝权限"
}
uni.showModal({
content: permisionID + strStatus,
showCancel: false
});
}
四、当前App的权限设置界面打开,可用于引导用户赋权。
内部已封装,不必区分IOS和Android。
示例代码:
permision.gotoAppPermissionSetting()
注:IOS上如果没有调用过的权限,不会出现在权限设置界面。Android碎版化严重,直接打开了App的设置界面。
五、获取当前手机是否开启或关闭了定位服务
内部已封装,不必区分IOS和Android
示例:
//返回true或false
permision.checkSystemEnableLocation()
六、扩展阅读
Native.js是用js调用原生API的一种写法,示例如下:
判断定位权限是否开启以及手机自身的位置服务是否被关闭
var cllocationManger = plus.ios.import("CLLocationManager");
var enable = cllocationManger.locationServicesEnabled();
var status = cllocationManger.authorizationStatus();
console.log("enable:" + enable);
console.log("status:" + status);
if (enable && status != 2) {
console.log("手机系统的定位已经打开且App已经获得定位权限");
} else {
console.log("手机系统的定位没有打开或App没有获得定位权限");
}
plus.ios.deleteObject(cllocationManger);
七、相关权限判断与开启示例
1.判断是否有拨打电话权限,示例如下:
import permision from "@/js_sdk/wa-permission/permission.js"
//检查是否开启通讯录服务
export const checkContect = () => {
return new Promise((resolve, reject) => {
permision.requestAndroidPermission('android.permission.CALL_PHONE').then(res => {
if(res==1){
resolve();
}else if(res == 0){
uni.showModal({
title: '提示',
content: '被永久拒绝授权, 请打开拨打电话权限',
success() {
permision.gotoAppPermissionSetting();
}
});
reject();
}else if(res == -1){
uni.showModal({
title: '提示',
content: '未获取授权, 请打开拨打电话权限',
success() {
permision.gotoAppPermissionSetting();
}
});
reject();
}
}).catch(() => {
uni.showModal({
title: '提示',
content: '请打开拨打电话权限',
success() {
permision.gotoAppPermissionSetting();
}
});
reject();
});
});
}
//通过import将checkContect函数引入调用页面,调用方法如下
// #ifdef APP-PLUS
checkContect().then(() => {
uni.makePhoneCall({
phoneNumber: '手机或座机号码'
});
});
// #endif
2.检查是否开启位置信息服务
import permision from "@/js_sdk/wa-permission/permission.js"
// 检查是否开启位置信息服务
export const checkOpenService = () => {
let result = permision.checkSystemEnableLocation();
if(!result) {
uni.showModal({
title: '提示',
content: '请打开定位服务功能',
showCancel: false,
success() {
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var Settings = plus.android.importClass('android.provider.Settings');
var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
main.startActivity(intent); // 打开系统设置GPS服务页面
}
});
}else {
console.log('已开启定位服务功能');
}
}
//通过import将checkOpenService函数名引入调用页,示例如下
// #ifdef APP-PLUS
let permissionStatus = checkOpenPermission();
if(!permissionStatus){
return false;
}
// #endif
其他权限判断与开启方法,可参考以上示例
|