【问题标题】:How can I customize permission dialog in Android?如何在 Android 中自定义权限对话框?
【发布时间】:2016-01-20 20:44:41
【问题描述】:

假设我在运行时请求如下权限:

ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

Android 系统会创建一个弹出对话框来请求权限。如何为该对话框定义自定义布局?

【问题讨论】:

标签: android android-permissions android-6.0-marshmallow


【解决方案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 中执行此操作。您不能为此在系统对话框中添加散文。
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多