更新记录

1.1(2019-07-20)

  • 补充Android动态权限判断
  • 补充打开App权限设置界面
  • 补充检查手机设备定位服务是否开启

1.0(2019-07-18)

1.0 包括iOS的App权限判断和Android的系统状态判断


平台兼容性

Native.js是纯前端js代码,不需要打包自定义基座。Native.js的详细介绍见Native.js入门

利用Native.js可获取当前App的授权状态,可打开App的授权设置界面。

本js插件已经封装为模块,并提供了一个示例应用。

使用步骤

  1. 下载本插件并存放到项目目录下,比如js_sdk/wa-permission/permission.js
  2. 在页面中引入这个js模块
    import permision from "@/js_sdk/wa-permission/permission.js"
  3. 调用模块的方法
    permision.judgeIosPermission("location") //判断iOS上是否给予位置权限,有权限返回true,否则返回false

API

该模块的方法如下:

方法1:Bool permision.judgeIosPermission(String permissionID)

获取iOS设备上当前App是否有某项权限

参数说明

参数名 类型 必填 说明
permissionID String iOS权限名称,值域清单如下表

permissionID 值域清单

参数名 说明
location 位置
push 推送(限iOS,注意Android上推送并不是一个权限)
camera 摄像头
photoLibrary 相册
record 麦克风
contact 通讯录
calendar 日历
memo 备忘录

示例

permision.judgeIosPermission("location") //判断iOS上是否给予位置权限,有权限返回true,否则返回false

方法2:await Number permision.requestAndroidPermission(String permisionID)

获取Android设备上当前App是否有某项权限

注意: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开发文档

返回值值域说明

permision.requestAndroidPermission(permisionID)返回值为数字,包括-1、0、1这3个数字。

返回值 说明
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
    });
},

方法3: void permision.gotoAppPermissionSetting()

打开当前App的权限设置界面。可用于引导用户赋权

内部已封装,不区分iOS和Android

示例代码

permision.gotoAppPermissionSetting()

iOS上如果没有调用过的权限,不会出现在权限设置界面。

Android碎片化严重,直接打开了App的设置界面。

方法4:Bool permision.checkSystemEnableLocation()

获取当前手机是否开启或关闭了定位服务

内部已封装,不区分iOS和Android

返回值 说明
true 开启
false 关闭

示例

permision.checkSystemEnableLocation() //返回true或false

扩展阅读

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

了解更多,可下载插件后看模块源码

FAQ

关于onShow调用问题

调用系统 api 就会触发OnShow,导致多次调用引起闪退。可以加个锁的概念,防止被重复调用。具体参考:https://ext.dcloud.net.cn/plugin?id=5605

plus is not defined

本插件是app专用插件,plus是app专用的全局对象,适用于5+App和uni-app的App端。运行在非app端时,比如web、小程序,就会提示plus is not defined

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问