动态权限: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){ }); });