IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> uni-app解决权限问题,引导用户跳转至设置界面 -> 正文阅读

[移动开发]uni-app解决权限问题,引导用户跳转至设置界面

利用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)

参数说明:

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

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

参数说明

参数名类型必填说明
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被永久拒绝授权

示例:

// 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关闭

示例:

//返回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

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 13:09:42  更:2021-10-29 13:11:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:48:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码