在应用申请权限时,如果用户选择了禁止后不再提示(不再询问),那么未来再次向用户请求该权限时,系统将会默认禁止该权限。这时候只能靠用户手动去授予权限,通过设计一个提示选择框来让用户选择,如果用户的确是想要授予该权限,那么就跳转至该应用的权限设置界面。
1、判断该权限是否处于禁止后不再提示(不再询问)
2、提醒用户我们需要该权限,是否前往设置
3、跳转当前应用的权限设置页面
使用 ContextCompat.checkSelfPermission() 方法来检查权限的授予状态。它将返回一个常量值,这个在 上篇文章 中有提到过。然后再使用 ActivityCompat.shouldShowRequestPermissionRationale() 方法判断该权限是否能够弹出带有请求权限的弹窗,这个是判断权限是否处于不再询问状态的重要方法。
根据上面两个方法,结合其逻辑则需要 checkSelfPermission() 方法返回“权限未被授予的状态常量”,同时 shouldShowRequestPermissionRationale() 方法判断该权限为“无法弹出权限申请框”,也就是返回布尔值 false。
同时满足上面这两个条件就表示该权限处于不再询问的状态。判断权限是否处于不再询问状态的代码有点小BUG,它必须申请过一次权限并且用户做出了选择之后判断才能够准确。
// 判断权限是否处于不再询问状态
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED){if(!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)){Toast.makeText(this, "该权限已被用户选择了不再询问!", Toast.LENGTH_SHORT).show();}else{Toast.makeText(this, "权限未被授予!", Toast.LENGTH_SHORT).show();}
}else{Toast.makeText(this, "权限已被授予!", Toast.LENGTH_SHORT).show();
}
使用 AlertDialog.Builder 构造器来创建一个对话框对象,然后再使用 setTitle、setMessage 等方法构造对话框的标题及信息等。
// 创建一个对话框
AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle("权限设置") // 设置标题.setMessage("应用缺乏必要的权限,是否前往手动授予该权限?") // 设置内容// 添加一个确认按钮并设置点击按钮后执行的代码.setPositiveButton("前往", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 点击按钮后执行的代码...}}).setNegativeButton("取消", null) // 添加一个取消按钮,无命令执行.create(); // 创建对话框
alertDialog.show(); // 显示对话框
使用 Intent 和 startActivity() 等方法跳转到当前应用的详情页面进行权限设置。
// 跳转至当前应用的详情页面
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
本文发布于:2024-01-31 11:31:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170667188528205.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |