apicloud app动态权限及android平台targetSdkVersion设置

–关于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;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风如白话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值