如何在Android中自定义权限对话框?

时间:2015-10-21 18:09:04

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

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

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

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

3 个答案:

答案 0 :(得分:44)

简短的回答是,你不能

正如android文档所说:

  

当您的应用调用requestPermissions()时,系统会向用户显示标准对话框。您的应用无法配置或更改该对话框。如果您需要向用户提供任何信息或说明,则应在调用requestPermissions()之前执行此操作,如“解释应用程序需要权限的原因”中所述。

因此,目前无法为权限对话框定义自定义布局。

您可以在此处找到更多详细信息:http://developer.android.com/training/permissions/requesting.html

答案 1 :(得分:15)

我已为权限创建自定义对话框:

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;
}

希望这会对你有所帮助:)。

答案 2 :(得分:0)

Android 6.0 Marshmallow. Cannot write to SD Card这篇文章帮助我显示了授予写入外部权限的对话框

相关问题