如何在 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 中自定义权限对话框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中自定义权限请求视图

如何在 Yii2 Gridview 中自定义默认数据确认对话框

如何在浏览器中自定义推送通知的权限请求弹出窗口?

活动中自定义对话框内的 ANDROID 片段

如何在Android中自定义动画

如何在 Android 中自定义进度条