apicloud 打包的一个安卓APP,在手机模拟器可以正常使用,在真机装上之后下载视频提示存储权限不可用,
需要手动到APP权限里面设置,一开始以为是编译的问题,找了一下编译的设置,全部权限都开启
但是真机上面就是不提示需要授权权限
查到两篇关于权限设置的文章
官方论坛中关于APP动态权限及Android平台targetSdkVersion设置的说明
https://community.apicloud.com/bbs/thread-110959-1-1.html
也就是说将APP的targetSdkVersion规则提升到26后,会发现如果新下载的APP默认是不开启权限的
APP内凡是有涉及需要使用手机权限的地方都需要做权限开启判断
这时候我们就必须通过监听APP是否已经开启了权限并提示用户开启来避免出现此类问题
这边要求不高,所以我就在APP开启页面,主动唤起权限的功能页面中调用该方法进行提示,具体代码跟设置如下
我这边用native app进行打包,不建议直接用web打包, 在官方hello APP 上面添加
调用示例
manifest.xml 文件配置
common.js 源代码
var publicFunction = { //检测APP所需权限是否开启,并提示用户开启对应权限 //callBack回调事件可自行在调用的时候写入 checkPermission: function(callBack){ //验证照相、相册、存储、通知权限(有需要可以继续增加,详看对应文档)https://docs.apicloud.com/Client-API/api#hasPermission // ['camera','photos','storage','notification'] var resultList = api.hasPermission({ list:['storage','notification'] }); var _permission = new Array(); for (var i = 0; i < resultList.length; i++) { if(resultList[i].granted == false){ _permission.push(resultList[i].name); } } // alert(JSON.stringify(resultList)) if(_permission && JSON.stringify(_permission) != '[]'){ api.requestPermission({ list:_permission, code:1 }, function(ret, err){ for (var i = 0; i < ret.list.length; i++) { if(ret.list[i].granted == false){ api.confirm({ title: '缺少权限,将导致部分功能无法使用', msg: '请确认开启对应权限。', buttons: ['确定开启', '取消'] }, function(ret, err) { if(ret.buttonIndex == 1){ publicFunction.checkPermission(callBack); }else{ callBack(); return; } }); }else{ callBack(); return; } } }); }else{ callBack(); return; } } }
按需加载的话建议在要使用到照相、电话等主动唤起权限的功能页面中调用该方法进行提示
说到这不得不说说 apicloud 的文档体验,想找个东西很难,就比如说现在这个想知道各个权限参数名都找不到(难受-_-!!)
本文效果代码参考自翻滚的胖子, 原文链接 http://iskeys.com/article/39