本文共 3838 字,大约阅读时间需要 12 分钟。
public class PermissionDelegate {
public interface IokDelegate { void onNext(int tagCode); }
private final int PERMISSION_CODE = 200;
private final Context mCtx;
private int mTagCode = -1;
private IokDelegate iOkDelegate = null;
private AlertDialog mAlertDialog = null;
public PermissionDelegate(Context ctx) {
this.mCtx = ctx;
}
public PermissionDelegate code(int tagCode) {
this.mTagCode = tagCode;
return this;
}
public PermissionDelegate setIokDelegate(IokDelegate delegate) {
this.iOkDelegate = delegate;
return this;
}
@NeedPermission(value = {
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, requestCode = PERMISSION_CODE)
public void checkPermission() {
if (this.iOkDelegate != null) this.iOkDelegate.onNext(this.mTagCode);
}
public void onDestroy() {
dismissAlertDialog();
iOkDelegate = null;
}
/**
* 构建对话框
*/
private AlertDialog alertDialog(String title, String message,
String cancel, DialogInterface.OnClickListener cancelListener,
String ok, DialogInterface.OnClickListener okListener) {
final AlertDialog.Builder builder = new AlertDialog.Builder(mCtx)
.setMessage(message).setCancelable(false);
if (!TextUtils.isEmpty(title)) builder.setTitle(title);
if (!TextUtils.isEmpty(ok)) builder.setPositiveButton(ok, okListener);
if (!TextUtils.isEmpty(cancel)) builder.setNegativeButton(cancel, cancelListener);
return builder.create();
}
/**
* 显示对话框
*/
private void showAlertDialog(String title, String message,
String cancel, DialogInterface.OnClickListener cancelListener,
String ok, DialogInterface.OnClickListener okListener) {
dismissAlertDialog();
mAlertDialog = alertDialog(title, message, cancel, cancelListener, ok, okListener);
mAlertDialog.show();
}
/**
* 关闭对话框
*/
private void dismissAlertDialog() {
if (mAlertDialog != null) {
if (mAlertDialog.isShowing()) mAlertDialog.dismiss();
mAlertDialog = null;
}
}
@PermissionDenied
private void callPermissionDenied(DenyBean model) {
if (model != null && model.getDenyList() != null) {
switch (model.getRequestCode()) {
case PERMISSION_CODE:
final String sPermission = deniedString(model);
final StringBuilder sBuilder = new StringBuilder("由于无法获取您的");
sBuilder.append(sPermission)
.append("权限,玩Android无法正常运行,请开启权限:设置-应用-玩Android-权限")
.append(sPermission);
final String title = "玩Android无法正常运行";
final String message = sBuilder.toString();
showAlertDialog(title, message, "退出", (dialog, which) -> {
if (dialog != null) dialog.dismiss();
dismissAlertDialog();
ActivityStackManager.instance().exitApp();
}, "去设置", (dialog, which) -> {
if (dialog != null) dialog.dismiss();
dismissAlertDialog();
SettingUtil.go2Setting(mCtx);
new Handler().postDelayed(() -> ActivityStackManager.instance().exitApp(), 2000);
});
break;
default: break;
}
}
}
// 权限被拒绝,提示message
private String deniedString(DenyBean model) {
String sPermission = "";
if (model != null && model.getDenyList() != null) {
for (int i = 0; i < model.getDenyList().size(); i++) {
switch (model.getDenyList().get(i)) {
case Manifest.permission.READ_PHONE_STATE:
sPermission += "设备信息、";
break;
case Manifest.permission.READ_EXTERNAL_STORAGE:
if (!sPermission.contains("存储空间")) sPermission += "存储空间、";
break;
case Manifest.permission.WRITE_EXTERNAL_STORAGE:
if (!sPermission.contains("存储空间")) sPermission += "存储空间、";
break;
default:
break;
}
}
if (sPermission.endsWith("、"))
sPermission = sPermission.substring(0, sPermission.length() - 2);
}
return sPermission;
}
@PermissionCanceled
private void callPermissionCanceled(CancelBean model) {
if (model != null) {
switch (model.getRequestCode()) {
case PERMISSION_CODE:
new Handler().postDelayed(() -> ActivityStackManager.instance().exitApp(), 3000);
final String message = "由于无法获取您的权限,玩Android无法正常运行,应用将在3s后自动退出";
showAlertDialog("", message, "", null, "", null);
break;
default: break;
}
}
}
}
转载地址:https://blog.csdn.net/weixin_33758343/article/details/117713898 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!