Android 危险权限组
PermissionsDispatcher 注解的作用
1.@RuntimePermissions(必写):用在需要申请权限的Activity或者Fragment上
2.@NeedsPermission(必写):用在需要申请权限的方法上
其他注释如上表,非必写
PermissionsDispatcher 的使用
1.在清单文件中添加你所需要用到的危险权限,这里演示相机、和存储权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
2.添加依赖,最新版本可查看github
implementation "org.permissionsdispatcher:permissionsdispatcher:4.3.1"
annotationProcessor "org.permissionsdispatcher:permissionsdispatcher-processor:4.3.1"
3.在Activity中使用
private class MainActivity extends AppCompatActivity{
//第一个注解
@RuntimePermissions
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_person_home);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//MainActivityPermissionsDispatcher是由“类名”+PermissionsDispatcher拼接的
//showDialogWithPermissionCheck是由“方法名”+WithPermissionCheck拼接的
MainActivityPermissionsDispatcher.showDialogWithPermissionCheck(MainActivity.this);
}
});
}
//使用在需要获取权限方法的注解,注解后面的括号写上需要申请的权限,可以单个,也可以多个,
//注意多个权限要使用{ },另外,注解的方法只能是public的
@NeedsPermission({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE})
void showChangeBackgroundDialog() {
//do something
//这里写上比如调用摄像头等需要用到权限的代码
}
//这是注解是在用户点击不再询问并且禁止申请权限,下一次用户需要申请权限时触发
@OnNeverAskAgain({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE})
void showNeedPermissionWhy() {
Toast.show("没有权限");
}
//必须写上onRequestPermissionsResult回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//必须写上
NewPersonHomeActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
}
踩坑点:
1.NeedsPermission和OnShowRationale、OnPermissionDenied、OnNeverAskAgain的注解权限要一致,否则不会回调提示方法。
2.写完注解方法一定要Rebuild Project。
3.安装插件,alt+insert可以快速创建注解方法。