当前位置:   article > 正文

uni-app解决权限问题,引导用户跳转至设置界面_uniapp打开系统设置权限

uniapp打开系统设置权限

利用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.调用模块的方法

  1. //判断IOS上是否给予位置权限,有权限返回true,否则返回false
  2. permission.judgeIosPermission('location');

二、IOS设备上当前App是否有某项权限

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

参数说明:

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

permissionID值域清单

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

示例:

  1. //判断IOS上是否给予位置权限,有权限返回true,否则返回false
  2. permission.judgeIosPermission('location');

三、Android设备上当前App是否有某个权限

方法2:await Number permission.requestAndroidPermission(String permissionID)

注意:Android是动态权限,请求权限状态时会触发弹框访问是否赋权(如果已经同意或永久禁止则不会访问),所以必须使用异步方式来处理)

参数说明

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

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被永久拒绝授权

示例:

  1. // vue的method里编写如下代码
  2. async requestAndroidPermission(permissionID) {
  3. var result = await permission.requestAndroidPermission(permissionID)
  4. var strStatus
  5. if (result == 1) {
  6. strStatus = "已获得授权"
  7. } else if (result == 0) {
  8. strStatus = "未获得授权"
  9. } else {
  10. strStatus = "被永久拒绝权限"
  11. }
  12. uni.showModal({
  13. content: permissionID + strStatus,
  14. showCancel: false
  15. });
  16. }

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

内部已封装,不必区分IOS和Android。

示例代码:

permission.gotoAppPermissionSetting()

注:IOS上如果没有调用过的权限,不会出现在权限设置界面。Android碎版化严重,直接打开了App的设置界面。

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

内部已封装,不必区分IOS和Android

返回值说明
true开启
false关闭

示例:

  1. //返回true或false
  2. permission.checkSystemEnableLocation()

六、扩展阅读

Native.js是用js调用原生API的一种写法,示例如下:

判断定位权限是否开启以及手机自身的位置服务是否被关闭

  1. var cllocationManger = plus.ios.import("CLLocationManager");
  2. var enable = cllocationManger.locationServicesEnabled();
  3. var status = cllocationManger.authorizationStatus();
  4. console.log("enable:" + enable);
  5. console.log("status:" + status);
  6. if (enable && status != 2) {
  7. console.log("手机系统的定位已经打开且App已经获得定位权限");
  8. } else {
  9. console.log("手机系统的定位没有打开或App没有获得定位权限");
  10. }
  11. plus.ios.deleteObject(cllocationManger);

七、相关权限判断与开启示例

1.判断是否有拨打电话权限,示例如下:

  1. import permission from "@/js_sdk/wa-permission/permission.js"
  2. //检查是否开启通讯录服务
  3. export const checkContect = () => {
  4. return new Promise((resolve, reject) => {
  5. permission.requestAndroidPermission('android.permission.CALL_PHONE').then(res => {
  6. if(res==1){
  7. resolve();
  8. }else if(res == 0){
  9. uni.showModal({
  10. title: '提示',
  11. content: '被永久拒绝授权, 请打开拨打电话权限',
  12. success() {
  13. permission.gotoAppPermissionSetting();
  14. }
  15. });
  16. reject();
  17. }else if(res == -1){
  18. uni.showModal({
  19. title: '提示',
  20. content: '未获取授权, 请打开拨打电话权限',
  21. success() {
  22. permission.gotoAppPermissionSetting();
  23. }
  24. });
  25. reject();
  26. }
  27. }).catch(() => {
  28. uni.showModal({
  29. title: '提示',
  30. content: '请打开拨打电话权限',
  31. success() {
  32. permission.gotoAppPermissionSetting();
  33. }
  34. });
  35. reject();
  36. });
  37. });
  38. }
  39. //通过import将checkContect函数引入调用页面,调用方法如下
  40. // #ifdef APP-PLUS
  41. checkContect().then(() => {
  42. uni.makePhoneCall({
  43. phoneNumber: '手机或座机号码'
  44. });
  45. });
  46. // #endif

2.检查是否开启位置信息服务

  1. import permission from "@/js_sdk/wa-permission/permission.js"
  2. // 检查是否开启位置信息服务
  3. export const checkOpenService = () => {
  4. let result = permission.checkSystemEnableLocation();
  5. if(!result) {
  6. uni.showModal({
  7. title: '提示',
  8. content: '请打开定位服务功能',
  9. showCancel: false,
  10. success() {
  11. var main = plus.android.runtimeMainActivity();
  12. var Intent = plus.android.importClass('android.content.Intent');
  13. var Settings = plus.android.importClass('android.provider.Settings');
  14. var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  15. main.startActivity(intent); // 打开系统设置GPS服务页面
  16. }
  17. });
  18. }else {
  19. console.log('已开启定位服务功能');
  20. }
  21. }
  22. //通过import将checkOpenService函数名引入调用页,示例如下
  23. // #ifdef APP-PLUS
  24. let permissionStatus = checkOpenPermission();
  25. if(!permissionStatus){
  26. return false;
  27. }
  28. // #endif

其他权限判断与开启方法,可参考以上示例

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/274449
推荐阅读
相关标签
  

闽ICP备14008679号