Android6.0动态申请权限

来源:互联网 发布:淘宝箱包类目 编辑:程序博客网 时间:2024/05/22 17:01

Android6.0动态申请权限

android6.0之后一些敏感的权限需要在清单文件中注册之外,还需要在代码中动态申请,这里以蓝牙权限为例,我们现在在代码中申请以下三个权限,“android.permission.BLUETOOTH_ADMIN”,“android.permission.BLUETOOTH”,“android.permission.ACCESS_COARSE_LOCATION”;

1.先定义一个字符串数组将我们要申请的权限全部存放在里面

 String[] permissions = new String[]{            "android.permission.BLUETOOTH_ADMIN", "android.permission.BLUETOOTH"            , "android.permission.ACCESS_COARSE_LOCATION"};

2.检查手机是否包含这些权限

public boolean requestAll() {        for (String peimiss : permissions) {            if (ActivityCompat.checkSelfPermission(this, peimiss) != PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }

返回false表示没有权限,返回true表示有权限,当没有权限时我们再申请权限

3.动态申请权限

if (Build.VERSION.SDK_INT >= 23 && !requestAll()) {            ActivityCompat.requestPermissions(this, permissions, 0);        }

完成上述三步后,在没有权限时就会弹出对话框提醒用户打开权限,如果还想监听用户点击对话框的监听,那么就要监听以下方法

4.重写onRequestPermissionsResult方法

//请求n个权限 permissions.length=n grantResults.length=n    //permissions[i]表示申请的权限字符串 grantResults[i]的值表示用户反馈的结果 0表示同意 -1表示不同意    //requestCode 的值表示和当时申请权限时的值一致@Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        for (int i = 0; i < permissions.length; i++) {            Log.e("Test","permissions==" + i + " ==" + permissions[i]);        }        for (int i = 0; i < grantResults.length; i++) {            Log.e("Test","mygt grantResults==" + i + " ==" + grantResults[i]);            if (grantResults[i] == -1) {                //finish();用户不同意打开申请时结束APP            }        }        Log.e("Test","requestCode==" + requestCode + "  ");        super.onRequestPermissionsResult(requestCode, permissions, grantResults);    }
原创粉丝点击