动态权限框架使用-EasyPermissions

EasyPermissions 是谷歌官方提供的动态权限申请库。

分成如下几个步骤:

1)检测权限

2)请求权限

3)响应请求结果

4)处理被拒绝的情况(进入到申请页面)

整个的思路:

检测权限 - 具备权限 - 直接调用方法

检测权限 - 不具备权限 - 申请权限 - 授权成功 / 授权失败

第一步:我们点击打电话的按钮,开始进行动态权限的检测

this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(EasyPermissions.hasPermissions(MainActivity.this, Manifest.permission.CALL_PHONE)){
            //具备权限 直接进行操作
            showToast("具备权限 直接进行操作");
        }else {
            //权限拒绝 申请权限
            showToast("权限拒绝 申请权限");
            /**
             * 第一个参数:Context对象
             * 第二个参数:权限弹窗上的文字提示语。告诉用户,这个权限用途。
             * 第三个参数:这次请求权限的唯一标示,code。
             * 第四个参数 : 一些系列的权限。
             */
            EasyPermissions.requestPermissions(MainActivity.this, "打电话",1,Manifest.permission.CALL_PHONE);
        }
    }
});

第二步:如果权限检测的结果是拒绝的,那么我们就申请权限。使用了requestPermissons()方法,当这个方法的返回后,我们调用了onRequestPermissionsResult()的回调,如下:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    // 将结果转发到EasyPermissions
    /**
     *
     * @param requestCode  请求的code
     * @param permissions  一些列的请求权限
     * @param grantResults 用户授权的结果
     * @param receivers    监听的上下文,处理回调
     */
    EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, MainActivity.this);
}

第三步:请求权限后,用户可能同意,也可能不同意。这样就根据回调来处理两种情况

/**
 * 请求权限成功。
 * 可以弹窗显示结果,也可执行具体需要的逻辑操作
 * @param requestCode
 * @param perms
 */
@Override
public void onPermissionsGranted(int requestCode, List perms) {
    showToast( "用户授权成功");
}

/**
 * 处理权限被拒的情况
 * @param requestCode
 * @param perms
 */
@Override
public void onPermissionsDenied(int requestCode, List perms) {
    showToast( "用户授权失败");
    /**
     * 若是在权限弹窗中,用户勾选了'NEVER ASK AGAIN.'或者'不在提示',且拒绝权限。
     * 这时候,需要跳转到设置界面去,让用户手动开启。
     */
    if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
        new AppSettingsDialog.Builder(this).setTitle("标题").setRationale("请申请权限").build().show();
    }
}

当授权失败以后,用户如果还需要使用的时候,我们就通过AppSettingDialog类来手动的让用户进行授权。

备注:

插件库:

implementation 'pub.devrel:easypermissions:0.4.0'

同时记着在注册文件中也添加该权限。

android:name="android.permission.CALL_PHONE" />

你可能感兴趣的:(android)