EasyPermission完美解决Android6.0权限

作者: 唠嗑008 | 来源:发表于2017-03-13 19:38 被阅读1013次

    github地址(Demo下载)
    https://github.com/zhouxu88/EasyPermission

    一、简介:

    android6.0 开始,权限的申请发生了改变,申请变的动态化,也就是运行时权限,EasyPermission 可以帮助简化权限申请的流程,同时使得代码更加具有逻辑。对申请的结果进行统一的返回。而且当用户拒绝了权限,任然可以通过打开系统设置,手动授权后,返回APP,继续操作,可以说是完美的解决了几乎所有可能发生的情况,强烈推荐

    android6.0 开始,权限的申请发生了改变,申请变的动态化,也就是运行时权限,和 iOS 相仿,动态化的意思是指,在每次使用需要危险权限的方法的时候,需要检查程序是否获得了该权限的许可。动态化的权限申请能够让用户更加清晰的知道程序需要什么权限,以及程序中哪些地方的操作需要涉及用户安全。不再是仅仅在程序安装的时候,一次性把所需要的普通的、危险级别的权限一次性列出来,然后展示给用户。 EasyPermissionUtil 可以帮助简化权限申请的流程,同时使得代码更加具有逻辑。对申请的结果进行统一的返回。

    二、如何使用

    首先,引用库

    dependencies {
     compile 'pub.devrel:easypermissions:0.3.0'
    }
    

    同样,easypermissions处理权限分为3步。

    1 、检查权限

    if (Build.VERSION.SDK_INT >= 23) {
                //打电话的权限
                String[] mPermissionList = new String[]{Manifest.permission.CALL_PHONE};
                if (EasyPermissions.hasPermissions(mContext, mPermissionList)) {
                    //已经同意过
                    call();
                } else {
                    //未同意过,或者说是拒绝了,再次申请权限
                    EasyPermissions.requestPermissions(
                            this,  //上下文
                            "需要拨打电话的权限", //提示文言
                            CALL_PHONE_REQUEST_CODE, //请求码
                            mPermissionList //权限列表
                    );
                }
            } else {
                //6.0以下,不需要授权
                call();
            }
    

    2、 申请权限

     EasyPermissions.requestPermissions(
                            this,  //上下文
                            "需要拨打电话的权限", //提示文言
                            CALL_PHONE_REQUEST_CODE, //请求码
                            mPermissionList //权限列表
                    );
    

    3 处理EasyPermissions.PermissionCallbacks的回调接口,直接处理权限是否成功申请

    //同意授权
        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            // Forward results to EasyPermissions
            //跳转到onPermissionsGranted或者onPermissionsDenied去回调授权结果
            EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
        }
    
    
        @Override
        public void onPermissionsGranted(int requestCode, List<String> list) {
            // Some permissions have been granted
            // ...
            Log.i(TAG, "onPermissionsGranted:" + requestCode + ":" + list.size());
            call();
        }
    
        //拒绝授权
        @Override
        public void onPermissionsDenied(int requestCode, List<String> perms) {
            // Some permissions have been denied
            // ...
    
            Log.i(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size());
    
            // (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."
            // This will display a dialog directing them to enable the permission in app settings.
            if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
                new AppSettingsDialog.Builder(this).build().show();
            }
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
                //拒绝授权后,从系统设置了授权后,返回APP进行相应的操作
                Log.i(TAG, "onPermissionsDenied:------>自定义设置授权后返回APP");
                call();
            }
        }
    

    相关文章

      网友评论

      • 起个牛逼的昵称:不完整,如果申请的一组权限,有某个权限用户没有授权,应该弹出dialog,然后启动应用的设置

      本文标题:EasyPermission完美解决Android6.0权限

      本文链接:https://www.haomeiwen.com/subject/bleqnttx.html