如何在 Android 中自定义权限对话框?
Posted
技术标签:
【中文标题】如何在 Android 中自定义权限对话框?【英文标题】:How can I customize permission dialog in Android? 【发布时间】:2016-01-20 20:44:41 【问题描述】:假设我在运行时请求如下权限:
ActivityCompat.requestPermissions(thisActivity,
new String[]Manifest.permission.READ_CONTACTS,
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
android 系统会创建一个弹出对话框来请求权限。如何为该对话框定义自定义布局?
【问题讨论】:
你不能,见***.com/questions/32097218/… 【参考方案1】:Android 6.0 Marshmallow. Cannot write to SD Card这篇文章帮助我摆脱了显示对话框以授予对外部权限的写入
【讨论】:
【参考方案2】:我已经为权限创建了自定义对话框:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE))
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
alertBuilder.setCancelable(true);
alertBuilder.setTitle("Permission necessary");
alertBuilder.setMessage("External storage permission is necessary");
alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener()
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void onClick(DialogInterface dialog, int which)
ActivityCompat.requestPermissions((Activity) context, new String[]Manifest.permission.READ_EXTERNAL_STORAGE, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE););
AlertDialog alert = alertBuilder.create();
alert.show();
else
ActivityCompat.requestPermissions((Activity) context, new String[]Manifest.permission.READ_EXTERNAL_STORAGE, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
return false;
else
return true;
希望对你有帮助:)
【讨论】:
看起来这只是创建一个新的对话框,当单击是时,将触发系统权限对话框,它不会改变Android中的实际权限对话框。与直接调用 ActivityCompat.requestPermissions... 没有什么不同 @BabyishTank :您不能自定义系统对话框。它只是用您自己的自定义消息创建一个自定义对话框。您可以直接调用系统权限对话。【参考方案3】:简短的回答是,你不能。
正如 android 文档所说:
当您的应用调用 requestPermissions() 时,系统会向用户显示一个标准对话框。您的应用无法配置或更改该对话框。如果您需要向用户提供任何信息或解释,您应该在调用 requestPermissions() 之前这样做,如“解释应用程序需要权限的原因”中所述。
因此,目前无法为权限对话框定义自定义布局。
您可以在此处找到更多详细信息:http://developer.android.com/training/permissions/requesting.html
【讨论】:
"android... 允许您向该对话框添加一些文本,解释用户为什么您请求该权限" - 我不知道。 @CommonsWare 我认为开发人员可以解释使用该权限的理由是错误的吗?或者只是 android 显示其关于该权限的默认解释? 您可以通过shouldShowPermissionRequestRationale()
了解您是否可能要显示解释。但是,您必须在自己的 UI 中执行此操作。您不能为此在系统对话框中添加散文。以上是关于如何在 Android 中自定义权限对话框?的主要内容,如果未能解决你的问题,请参考以下文章