动态权限:Android自系统6.0开始,提供动态权限机制,对于敏感权限(存储,定位,录音,拍照,录像等),需要在APP运行过程中动态向用户申请,这就和IOS系统的权限使用体验保持一致了(IOS一直以来就是动态权限)。
下面是总结的代码:
res 下添加 manifest.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<application name="targetSdkVersion" value="26"/>
</manifest>
自定义js方法
/**
* 判断APP是否持有该权限
* @param array one_per - 权限数组['camera','location']
*/
function hasPermission(one_per) {
var rets = api.hasPermission({
list: one_per
});
//获取需要判断的权限
var temp = new Array();
var status = true;
for (var obj in rets) {
var granted = rets[obj].granted;
var names = rets[obj].name;
if (granted == false) {
temp.push(names);
status = false;
}
}
//返回结果,和需要申请的权限
return { "status": status, "perms": temp };
}
/**
* 获取权限
* @param array one_per - 权限数组['camera','location']
* @param function callback - 回调函数
*/
function reqPermission(one_per,callback) {
api.requestPermission({
list: one_per,
code: 100001
}, function(ret, err) {
//获取处理结果
var list = ret.list;
for (var i in list) {
//只有有一项权限不足,就返回
if (list[i].granted == false) {
api.toast({
msg: '权限不足,无法进行下一步操作',
duration: 2000,
location: 'bottom'
});
return false;
}
}
if (callback) {
callback();
return;
}
});
}
/**
* 判断是否持有数组中的权限,无权限获取对应的权限
* @param array perm - 权限数组['camera','location']
* @param function callback - 回调函数
*/
function confirmPer(perm, callback) {
//权限类型有
//calendar日历,camera相机,contacts通讯录,location位置信息,microphone麦克风
//phone电话,sensor身体传感器,sms短信,storage存储空间,photos相册
console.log(perm);
//ios系统直接跳过
if(api.systemType == 'ios'){
// callback();
// return false;
}
//判断多个权限是,使用 ,(英文逗号隔开)
if (perm.indexOf(",") != -1) {
var perms = perm.split(',');
} else {
var perms = new Array(perm);
}
//判断是否持有该数组中的权限
var has = hasPermission(perms);
console.log(JSON.stringify(has));
if (!has.status) {
//获取权限
reqPermission(has.perms,callback);
return false;
}
callback();
return true;
}
调用例子:
confirmPer('camera,sensor',function(){
api.alert({
title: '判断完回来了。',
msg: 'testmsg',
}, function(ret, err){
});
});
