赞
踩
–关于Android动态权限和targetSdkVersion背景:
targetSdkVersion:自2018年11月开始,GooglePlay以及国内大部分应用市场要求APP编译目标SDK必须为26及以上,否则不予提交审核;有许多已有APP转到APICloud开发后,因targetSdkVersion降级而导致无法覆盖安装;
动态权限:Android自系统6.0开始,提供动态权限机制,对于敏感权限(存储,定位,录音,拍照,录像等),需要在APP运行过程中动态向用户申请,这就和IOS系统的权限使用体验保持一致了(IOS一直以来就是动态权限)。
在Android上使用动态权限,要求APP编译的目标SDK(即targetSdkVersion)为23及以上(对应为android6.0及以上系统),22及以下系统会执行缺省处理(手机厂商也可能定制处理),APICloud为满足更普遍的开发需求,默认配置targetSdkVersion为22,即权限走系统缺省处理,如何开启动态权限,需要按照如下说明操作。
1、在res文件下创建manifest.xml文件,将其中的targetSdkVersion更新为目标值,例如28。
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<application name="targetSdkVersion" value="28"/>
</manifest>
2、将app代码中所有涉及到需要动态权限的操作,改造一遍 (例如进行拍照录制视频等需要使用摄像头,以前的缺省处理中不需要申请摄像头权限,而开启动态权限后,必须在进行拍照之前,判断是否有摄像头权限,没有则进行申请,只有用户同意了摄像头权限才能进行接下来拍照的操作);
opWithPermission('storage') function hasPermission(one_per){ var perms = new Array(); if(one_per){ perms.push(one_per); }else{ var prs = document.getElementsByName("p_list"); for(var i = 0; i < prs.length; i++){ if(prs[i].checked){ perms.push(prs[i].value); } } } var rets = api.hasPermission({ list:perms }); if(!one_per){ $alert('判断结果:' + JSON.stringify(rets)); return; } return rets; } function reqPermission(one_per, callback){ var perms = new Array(); if(one_per){ perms.push(one_per); }else{ var prs = document.getElementsByName("p_list_r"); for(var i = 0; i < prs.length; i++){ if(prs[i].checked){ perms.push(prs[i].value); } } } api.requestPermission({ list: ['storage','camera'], code: 100001 }, function(ret, err){ if(callback){ callback(ret); return; } var str = '请求结果:\n'; str += '请求码: ' + ret.code + '\n'; str += "是否勾选\"不再询问\"按钮: " + (ret.never ? '是' : '否') + '\n'; str += '请求结果: \n'; var list = ret.list; for(var i in list){ str += list[i].name + '=' + list[i].granted + '\n'; } //$alert(str); console.log(JSON.stringify(ret)); }); } function opWithPermission(perm){ if(!confirmPer(perm)){ return; } if('storage' == perm){ if(!confirmPer('camera')){ return; } } } function confirmPer(perm){ var has = hasPermission(perm); if(perm=="camera"){ var permtext = '相机' } if(perm=="storage"){ var permtext = '存储' } if(!has || !has[0] || !has[0].granted){ // api.confirm({ // title: '提醒', // msg: '没有获得 ' + permtext + " 权限\n是否前往设置?", // buttons: ['去设置', '取消'] // }, function(ret, err) { // if(1 == ret.buttonIndex){ // reqPermission(perm); // } // }); reqPermission(perm); return false; } return true; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。