Android-EasyPermissions-处理权限

Android-EasyPermissions-处理权限

介绍:

Android app的许多功能需要开权限。
比如识别蓝牙和wifi,都需要开精确定位的权限(需要手动打开)。如果不开权限,就会出bug然后花费大量时间。
介绍一个好用的库链接: EasyPermissions 地址:https://github.com/googlesamples/easypermissions.以及它简单的使用步骤。

步骤一

导入库,implementation其中一个:

dependencies {
    // For developers using AndroidX in their applications
    implementation 'pub.devrel:easypermissions:3.0.0'
 
    // For developers using the Android Support Library
    implementation 'pub.devrel:easypermissions:2.0.1'
}

步骤二

可以在app启动的LaunchActivity 中实现它的全部功能
在变量中定义一个数组:
把需要手动开启的权限都放进去,当然啦,不要忘记在AndroidManifest中添加。

private static String[] permissions = new String[]{
            ACCESS_COARSE_LOCATION,
            ACCESS_FINE_LOCATION,
    };

这个数组有啥用呢,在步骤三中用。

步骤三

定义一个 checkPermission 方法。步骤二的 数组用在 这里中。
注意 AfterPermissioonGranted 注解,这个注解是只是为了方便。用了反射??反正就是回调的意思,如果权限已经都允许了,就会立刻运行if中的方法,本代码是toast :权限已经全部启动。

  public static final int REQUEST_CODE = 0x777;

  @AfterPermissionGranted(REQUEST_CODE)
    private void checkPermission(){
        if (EasyPermissions.hasPermissions(this,permissions)){
            ToastUtil.showToast(getApplicationContext(),"权限已经全部启动");
        }else {
            EasyPermissions.requestPermissions(this,"欢迎使用,我们需要以下权限",REQUEST_CODE,permissions);

        }
    }

步骤四

在这里插入图片描述
在完成上面的请求后,通过下面的代码回调是否拒绝

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        StringBuilder sb = new StringBuilder();
        boolean hasDeniedPermission = false;
        for (int i = 0; i < grantResults.length; i++) {
           //获取Denied,有否认的权限就添加
            if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
                sb.append(permissions[i]);
                sb.append("\n");
                hasDeniedPermission = true;
            }
        }

        if (hasDeniedPermission) {
         //如果有取消的权限,你怎么处理呢?可以定义dialog提示用户
          
        }
        EasyPermissions.onRequestPermissionsResult(REQUEST_CODE, permissions, grantResults, this);
    }

完成了

在想调用的地方调用

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            checkPermission();
        }
    }
    
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        MyLog.i(TAG, "requestCode: " + requestCode + "---resultCode: " + resultCode);

        checkPermission();

        if (requestCode == 0) {

        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值