Предоставление пользовательского текста для диалогового окна разрешения Android M

Возможно ли предоставить пользовательский текст для системного диалога, который отображается, когда пользователю предлагается предоставить разрешение?

Ответы

Ответ 1

Нет, вы не можете настроить текст диалога, но вы можете предоставить объяснение перед запросом разрешения. Цитирование из developer.android.com:

Разрешения на доступ

Если вашему приложению требуется опасное разрешение, указанное в приложении манифест, он должен попросить пользователя предоставить разрешение. Android предоставляет несколько методов, которые вы можете использовать для запроса разрешения. призвание эти методы вызывают стандартный диалог Android, который вы не можете настроить.

Объясните, почему приложение нуждается в разрешениях

В некоторых случаях вы можете помочь пользователю понять, почему вашему приложению требуется разрешение. Например, если пользователь запускает приложение для фотографии, пользователь, вероятно, не удивится, что приложение запрашивает разрешение на использование камеры, но пользователь может не понять, почему приложение хочет получить доступ к местоположению пользователя или контакты. Прежде чем запрашивать разрешение, вы должны рассмотреть предоставляя объяснения пользователю. Имейте в виду, что вы не хотите подавить пользователя объяснениями; если вы предоставляете слишком много объяснения, пользователь может найти приложение разочарование и удалить его.

Один из подходов, который вы можете использовать, состоит в том, чтобы предоставить объяснение только в том случае, если пользователь уже отклонил этот запрос разрешения. Если пользователь сохраняет пытаясь использовать функциональные возможности, требующие разрешения, но сохраняет отклонение запроса на разрешение, что, вероятно, показывает, что пользователь не понимает, почему для приложения требуется разрешение на предоставление функциональность. В такой ситуации, вероятно, хорошая идея показать объяснение.

Чтобы помочь найти ситуации, когда пользователю может понадобиться объяснение, Android предоставляет метод utiltity, shouldShowRequestPermissionRationale(). Этот метод возвращает true, если приложение запросило это разрешение ранее, и пользователь отказался запрос.

Ответ 2

Мы не можем настроить диалог разрешения запросов, но мы можем предоставить пользователю настраиваемое объяснение, почему мы запрашиваем ниже метод с пользовательским объяснением

   private void checkForCameraPermission() {
    // Here, thisActivity is the current activity
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
            AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
            alertBuilder.setCancelable(true);
            alertBuilder.setTitle("Camera permission necessary");
            alertBuilder.setMessage("FITsociety need camera permission to read barcode.");
            alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ActivityCompat.requestPermissions(BarCodeScannerActivity.this,
                            new String[]{Manifest.permission.CAMERA},
                            MY_PERMISSIONS_REQUEST_CAMERA);
                }
            });

            AlertDialog alert = alertBuilder.create();
            alert.show();
        } else {
            // No explanation needed, we can request the permission.
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CAMERA},
                    MY_PERMISSIONS_REQUEST_CAMERA);
            // MY_PERMISSIONS_REQUEST_CAMERA is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    } else {
        setBarCodeScannerView();
    }
}

приведенный выше метод проверяет, разрешено ли разрешение, если нет, тогда он проверяет, требуется ли настраиваемое объяснение с помощью этого метода.

ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)

документация для этого метода приведена здесь shouldShowRequestPermissionRationale() этот метод возвращает true, только если пользователь отказывает в диалоговом окне разрешения или пользователь закрывает разрешение от настройки приложения, если пользователь сделал это, затем отобразит диалоговое окно с настраиваемым объяснением и продолжит надеяться, что он работает.