EasyPermission完美解决Android6.0权限

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

你可能感兴趣的:(Android6.0权限问题)