var permTxt = {
'camera': '相机/拍照/录像',
'contacts': '联系人读取/写入',
'microphone': '麦克风',
'location': '位置信息',
'notification': '状态栏通知',
'calendar': '日历读取/写入',
'phone': '拨打电话',
'sms': '短信',
'storage': '存储空间'
};
/*申请动态权限*/
Cor.confirmPermission = function(perm_, callback) {
var permArr = perm_.split(',');
var isAllGranted = Cor.hasPermission(permArr, callback);
if (!isAllGranted) {
//用户选择拒绝不再询问的后下次启动APP不再请求权限
if (Cor.getVal('COR_NEVER') !== 'true') {
Cor.requestPermission(permArr, callback);
}
} else {
Cor.delVal('COR_NEVER');
console.log('请求的权限已全部打开>>>>>');
}
}
var curName = '';
Cor.hasPermission = function(permArr, callback) { //判断是否有权限
var hasPerm = api.hasPermission({ list: permArr });
console.log('hasPerm:' + JSON.stringify(hasPerm));
console.log('检测是否有权限,name:权限名称; granted:授予,false代表没有授权');
//默认1为有权限,0为无权限
var temp = 1; var allTemp = 1; curName = '';
for (var i = 0; i < hasPerm.length; i++) {
if (!hasPerm[i].granted) {
temp = 0;
curName += '[' + permTxt[hasPerm[i].name] + ']' + '\t';
} else {
temp = 1;
}
allTemp *= temp;
}
console.log("检测权限列表是否有授权,结果为:"+((allTemp === 1) ? "全部权限打开" : "存在部分权限或者全部权限被禁用"));
return (allTemp === 1); //只要权限列表中存在至少一个权限没有授权,就认为没有完全授权
}
Cor.requestPermission = function(permArr, callback) {
api.requestPermission({ list: permArr }, function(ret, err) {
console.log('再次检测是否授权>>>>>>>>>>>>>>>>>>>>>>>>>> ');
isAllGranted = Cor.hasPermission(permArr, callback); //用户做出选择后需要再次检测是否有权限
if (!isAllGranted) {
// 记录了选择手动设置的状态到本地文件,下次就不会弹窗询问,只能用户自己去设置页授权了
// 多个权限中,只要存在有一个权限为拒绝不再询问,那么其他拒绝的权限都会等同被忽略,只要用户自己到设置页面中全部开启了,才能恢复
Cor.setVal('COR_NEVER', ret.never ? 'true' : 'false');
Cor.permConfirmDialog(curName, ret.never, function(ret, err, rightBtnTitle) {
// 如果是手动设置(拒绝不再询问),就能再次请求,如果强制退出,就不再请求
console.log(rightBtnTitle==='手动设置'?'用户选择拒绝,不再询问':'用户选择拒绝授权');
console.log(rightBtnTitle);
if (rightBtnTitle==='手动设置') { Cor.delVal('COR_NEVER');}// 因为ret.never 在这个方法里没有效果,所以改传rightBtnTitle
Cor.requestPermission(permArr, callback); //请求权限
});
} else {
console.log('请求的权限已全部打开');
Cor.delVal('COR_NEVER');
}
});
}
Cor.permConfirmDialog = function(content, isNever, callback) { //权限说明对话框
Cor.confirmDialog(
'权限说明',
'获取"' + content + '"权限被拒绝,对应功能可能无法正常使用!',
'残忍退出',
isNever ? '手动设置' : '重新授权',
callback);
}