您的位置:首页 > 移动开发 > Android开发

Android6.0以后 申请敏感权限两次的解决方法

2017-04-25 12:46 363 查看
   Android6.0之前, app在安装时会提示用户此app需要使用哪些权限,但用户只能选择同意或拒绝安装,而不能单独对某项权限进行授予或拒绝。Android的这套权限机制并没有真正的起到权限管理和保护信息的作用。所以从Android6.0开始,Android引入了新的权限管理机制,当用户选择了拒绝某敏感项权限时,应用将无法执行需要对应权限的api
Android权限机制在此

    故而对于6.0这种情况,很多app就会在开发时,设定
应用在安装后打开就提示用户所需的权限时,用户若是选择了拒绝,则退出当前app 。

 
  那么问题来了,有时候部分涉及敏感权限的框架和功能(比如极光)在初始化“过早”的时候 会造成 提示用户所需的相同的权限 两次,这是因为 用户在还没有同意相关权限的时候,(极光)在初始化的时候就已经调用了对应了敏感权限的api,所以会调用两遍,将其初始化放在用户同意权限之后就ok了

/**
* 检查运行时权限
*
*   2017-03-27
*/
private void checkPermissions() {
if (!SPUtils.getBoolean(Constant.SP_PERMISSION, false)) {
PermissionUtil.getInstance()
.reqPermissions(instance,
new String[]{Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION},
new PermissionUtil.OnReqPermissionListener() {
@Override
public void onUserCancel() {
savePermissionsStatus(false);
}

@Override
public void onSuccess() {
if(null != MainActivity.handlerHolder){
MainActivity.handlerHolder.sendEmptyMessage(Constant.MSG_WHAT_LOAD_INDEX);
}
savePermissionsStatus(true);

JPushInterface.setDebugMode(true);    // 设置开启日志,发布时请关闭日志
JPushInterface.init(getApplicationContext());
}

@Override
public void onFailed(String[] strings, String[] strings1) {
savePermissionsStatus(false);
}

@Override
public void onAlreadyDenied(String[] strings) {
savePermissionsStatus(false);
}
});
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐