6.0以上权限运行时框架Easypermissions使用详解

目录

Android6.0以上的需要进行动态申请权限,由于原生的请求方法使用过于复杂,所以后来涌现出大量的权限检查框架,有基于apt技术的,有基于rxjava技术的,有基于ioc技术的,这里我给大家推荐的是google官方推荐的easypermissions,我自己在项目中也多次使用过,感觉很方便,符合各种应用场景,此库是谷歌推荐的权限申请库,放心大胆的使用吧

 


 导入easypermissions依赖库

 在模块的的build.gradle中添加以下代码。

implementation 'pub.devrel:easypermissions:0.3.0'

然后在需要进行权限请求的activity中实现 EasyPermissions.PermissionCallbacks接口

public class WelcomeActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {
    private static final int PERMISSION_CODE = 10000;
    private static final int REQUEST_CODE = 10001;
    private static final int HANDLER_DELAYED = 1000;

 

    private final String[] permissions = {Manifest.permission.SEND_SMS, Manifest.permission.CALL_PHONE,
            Manifest.permission.CAMERA, Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        // 版本判断。当手机系统大于 23 时,才有必要去动态申请权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions();
        } 
    }


    /**
     * 申请权限的方法这个是自定义的
     */
    private void requestPermissions() {
        //判断有没有权限
        if (EasyPermissions.hasPermissions(this, permissions)) {
            // 如果有权限了, 就做你该做的事情
           
        } else {
            // 如果没有权限, 就去申请权限
            // this: 上下文
            // Dialog显示的正文
            // PERMISSION_CODE 请求码, 用于回调的时候判断是哪次申请
            // perms 就是你要申请的权限
            EasyPermissions.requestPermissions(this, "亲爱的用户,禁用权限可能会导致您的某些功能无法正常使用", R.string.ok, R.string.cancel, PERMISSION_CODE, permissions);
        }
    }


//系统的权限结果返回回调,此方法一定要实现

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }


    //权限申请成功的回调
    @Override
    public void onPermissionsGranted(int requestCode, List perms) {
       //这里是根据perms的大小来判断用户把所有的权限都赋予了
        if (perms.size() >= 6) {
           //执行代码
        }
    }


    //权限申请失败的回调
    @Override
    public void onPermissionsDenied(int requestCode, List perms) {
        if (requestCode != PERMISSION_CODE) {
            return;
        }
        //判断用户是否点击了不在提醒
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
            new AppSettingsDialog.Builder(this)
                    .setTitle("权限已经被您拒绝")
                    .setRationale("可能会导致您的某些功能不能正常使用,前往设置打开权限")
                    .setPositiveButton("前往设置")
                    .setNegativeButton("取消")
                    .setRequestCode(REQUEST_CODE)//用于onActivityResult回调做其它对应相关的操作
                    .build()
                    .show();
        } else {
//这里需要注意的是如果用户把所有的权限都拒绝了,就给出提示框
            if (perms.size() >= 6) {
                new AppSettingsDialog.Builder(this)
                        .setTitle("权限已经被您拒绝")
                        .setRationale("可能会导致您的某些功能不能正常使用,前往设置打开权限")
                        .setPositiveButton("前往设置")
                        .setNegativeButton("取消")
                        .setRequestCode(REQUEST_CODE)//用于onActivityResult回调做其它对应相关的操作
                        .build()
                        .show();
            } else {
如果用户没有全部拒绝那么就再次请求权限
                requestPermissions();
            }
        }
    }

//从系统设置界面返回的回调

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE) {
           //执行代码
        }
    }
}

@AfterPermissionGranted注解为了提供方便,是可选的。

使用了该注解,当权限请求被用户同意后,会根据请求code来执行,相应的含有@AfterPermissionGranted注解的方法。

简化了请求成功操作流程,不需要在EasyPermissions.onRequestPermissionsResult()的回调监听器中请求成功的方法中,再次手动调用,获取权限后需要操作的逻辑代码。

以下代码,请求电话权限,当用户同意权限后,弹出一个Toast弹窗的逻辑处理操作。

  @AfterPermissionGranted(Manifest.permission.CALL_PHONE) 是可选的
  public void onPermissionsSuccess() {
        ToastUtils.showToast(getApplicationContext(), "用户授权成功");
  }

使用了此注解的方法在权限申请成功后都会被回调

 

 

你可能感兴趣的:(6.0以上权限运行时框架Easypermissions使用详解)