easypermissions 权限处理

1.依赖

    implementation 'pub.devrel:easypermissions:2.0.1'

2.定义自己要申请的权限

   String[] PERMS = {Manifest.permission.INTERNET,//网络
            Manifest.permission.WRITE_EXTERNAL_STORAGE,//写
            Manifest.permission.READ_EXTERNAL_STORAGE,//读
            Manifest.permission.CALL_PHONE,//打电话
            Manifest.permission.SEND_SMS//发短信
    };

3.判断是否授予过权限

  if (EasyPermissions.hasPermissions(this,PERMS)){
            //所有授权通过
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
            startActivity(new Intent(StartActivity.this,MainActivity.class));
            }
        },1000);
        }else{
            //授权没有通过
            /**
             *@param host Context对象
             *@param rationale  权限弹窗上的提示语。
             *@param requestCode 请求权限的唯一标识码  10001
             *@param perms 一系列权限
             */
            EasyPermissions.requestPermissions(this,"请授予权限,否则影响部分使用功能。",10001,PERMS);
        }

4.重写onRequestPermissionResult把处理结果告诉easypermissions 

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //将结果转发给EasyPermissions
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

5.实现 EasyPermissions.PermissionCallbacks 重写两个方法onPermissionsGranted 以及onPermissionsDenied

public class StartActivity extends AppCompatActivity implements  EasyPermissions.PermissionCallbacks{

这里不用着急处理申请成功后的操作,我们需要自己判断哪些权限成功了,那些没成功,具体简易步骤,请看步骤6 

  /**
     * 申请成功时调用
     * @param requestCode 请求权限的唯一标识码
     * @param perms 申请成功的权限集合
     */
    @Override
    public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
    }

 申请失败的时候提示用户去设置里给权限,然后跳到设置

 /**
     * 申请拒绝时调用
     * @param requestCode 请求权限的唯一标识码
     * @param perms 一系列权限
     */
    @Override
    public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
        /**
         * 若是在权限弹窗中,用户勾选了'不在提示',且拒绝权限。
         * 这时候,需要跳转到设置界面去,让用户手动开启。
         */
            new AppSettingsDialog
                    .Builder(this)
                    .setTitle("提示!")
                    .setRationale("请到设置授予权限,否则影响部分功能使用。")
                    .build()
                    .show();
    }

6.使用注解执行全部权限申请成功后的方法

 /**
     * 使用了该注解,当权限请求被用户同意后,会根据请求code来执行,相应的含有@AfterPermissionGranted注解的方法。
     *
     * 主要用于简化逻辑
     * 简化了请求成功操作流程,不需要在EasyPermissions.onRequestPermissionsResult()的回调监听器中请求成功的方法中,再次手动调用,获取权限后需要操作的逻辑代码。
     *
     * 简言之,用户同意全部权限后,会执行使用了 @AfterPermissionGranted(10001)注解的方法
     * 如果请求code不是10001的话,也就是用户没有全部同意权限,使用了 @AfterPermissionGranted(10001)注解的方法不会执行
     * */
    @AfterPermissionGranted(10001)
    public void souccee(){
//        Toast.makeText(this, "哈哈哈哈哈哈成功了", Toast.LENGTH_SHORT).show();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(StartActivity.this,MainActivity.class));
            }
        },1000);
    }

 /**
     * 使用了该注解,当权限请求被用户同意后,会根据请求code来执行,相应的含有@AfterPermissionGranted注解的方法。
     *
     * 主要用于简化逻辑
     * 简化了请求成功操作流程,不需要在EasyPermissions.onRequestPermissionsResult()的回调监听器中请求成功的方法中,再次手动调用,获取权限后需要操作的逻辑代码。
     *
     * 简言之,用户同意全部权限后,会执行使用了 @AfterPermissionGranted(10001)注解的方法
     * 如果请求code不是10001的话,也就是用户没有全部同意权限,使用了 @AfterPermissionGranted(10001)注解的方法不会执行
     * */

7.最后重写onActivityResult判断从设置页面回来后,权限是否给成功

  @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
            //从设置页面返回,判断权限是否申请。
            if (EasyPermissions.hasPermissions(this, PERMS)) {
                Toast.makeText(this, "权限申请成功!", Toast.LENGTH_SHORT).show();
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        startActivity(new Intent(StartActivity.this,MainActivity.class));
                    }
                },1000);
            } else {
                Toast.makeText(this, "权限申请失败!", Toast.LENGTH_SHORT).show();
            }
        }

    }

至此,完事儿。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值