介绍:
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) {
}
}