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

来源:互联网 发布:新田县广电网络费用 编辑:程序博客网 时间:2024/06/10 01:31

   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);                                }                            });        }    }


0 0
原创粉丝点击