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

How can I customize permission dialog in Android?

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

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

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

简短的回答是,你不能

正如 android 文档所说:

When your app calls requestPermissions(), the system shows a standard dialog box to the user. Your app cannot configure or alter that dialog box. If you need to provide any information or explanation to the user, you should do that before you call requestPermissions(), as described in "Explain why the app needs permissions".

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

您可以在这里找到更详细的信息:http://developer.android.com/training/permissions/requesting.html

我已创建自定义对话框以获得权限:

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 6.0 Marshmallow. Cannot write to SD Card 这个 post 帮助我显示对话框以授予写入外部权限