Android 权限申请工具类
本篇文章用于记录在项目中用到的权限申请工具类。我们在项目中都遇到过权限申请问题,每一次的权限申请都是繁琐的,并且在权限的各个状态都需要我们去判断,让每个开发人员都无不烦躁。在这里我要十分感谢郭霖大神的博客PermissionX现在支持Java了!还有Android 11权限变更讲解这篇文章为我们封装了很好的权限申请功能。
集成:
implementation 'com.permissionx.guolindev:permissionx:1.3.0'
使用:
PermissionX.init(fragmentActivity)
.permissions(Manifest.permission.CAMERA)
.onExplainRequestReason(new ExplainReasonCallbackWithBeforeParam() {
@Override
public void onExplainReason(ExplainScope scope, List<String> deniedList, boolean beforeRequest) {
//这里是选择禁止后的提示
scope.showRequestReasonDialog(deniedList, "相机权限是必须依赖的权限", "去开启","关闭");
}
})
.onForwardToSettings(new ForwardToSettingsCallback() {
@Override
public void onForwardToSettings(ForwardScope scope, List<String> deniedList) {
//这里是选择禁止且不再提示后的提示
scope.showForwardToSettingsDialog(deniedList, "程序需要您去应用程序设置当中手动开启相机权限", "去开启","关闭");
}
})
.request(new RequestCallback() {
@Override
public void onResult(boolean allGranted, List<String> grantedList, List<String> deniedList) {
if (allGranted){
//这里是申请权限同意后的操作
}else {
//不同意时的操作
}
}
});
上面是郭霖大神封装后的使用方法,很简便。在实际项目使用中,我发现光是这样还不够,我根据自己项目的业务逻辑在上面的基础上封装成了工具类,直接调用即可。
使用情景1、申请的权限不是必须权限,不管是否同意都能继续往下走
工具类实现:
/**
* 此方法申请的权限不是必须的,就是不管是否同意权限都能继续往下走
* @param fragmentActivity
* @param permissions
*/
public void setPermission(FragmentActivity fragmentActivity,AfterPermission afterPermission,String... permissions){
PermissionX.init(fragmentActivity)
.permissions(new ArrayList<>(Arrays.asList(permissions)))
.request(new RequestCallback() {
@Override
public void onResult(boolean allGranted, List<String> grantedList, List<String> deniedList) {
//不管同不同意权限,都继续往下执行
if (afterPermission!=null){
afterPermission.doNext();
}
}
});
}
外部调用:
PermissionUtils permissionUtils = new PermissionUtils();
permissionUtils.setPermission(this, new PermissionUtils.AfterPermission() {
@Override
public void doNext() {
//此处调用继续往下执行的代码
}
},Manifest.permission.WRITE_EXTERNAL_STORAGE);
使用情景2、此方法申请的权限不是必须的,但在不同意权限的时候会走另外一条路
工具类中方法实现:
/**
* 此方法申请的权限不是必须的,但在不同意权限的时候会走另外一条路
* @param fragmentActivity
* @param permissions
*/
public void setPermission(FragmentActivity fragmentActivity,boolean other,AfterPermissionTwo afterPermissionTwo,String... permissions){
PermissionX.init(fragmentActivity)
.permissions(