android 6.0权限统一,snails-permission

该博客主要讨论了Android应用程序的权限管理。通过PermissionDelegate类,实现了请求读取电话状态、外部存储读写权限的流程,并在用户拒绝或取消权限请求时展示相应的对话框,引导用户进行设置。在权限被拒绝时,应用会提示用户开启所需权限,否则将退出应用;如果用户取消权限,应用将在3秒后自动退出。此外,还提供了构建、显示和关闭对话框的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值