更新记录

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协议