首页 > 建站教程 > APP开发,混合APP >  APICloud 动态权限完整示范代码正文

APICloud 动态权限完整示范代码

    targetSdkVersion:自2018年11月开始,GooglePlay以及国内大部分应用市场要求APP编译目标SDK必须为26及以上,否则不予提交审核;有许多已有APP转到APICloud开发后,因targetSdkVersion降级而导致无法覆盖安装;
    动态权限: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){

    });
});