Проблема с поворотом экрана и onRequestPermissionsResults - PullRequest
0 голосов
/ 18 июня 2020

Посмотрим, сможешь ли ты помочь мне. У меня есть приложение, которое при запуске требует от меня некоторого хранилища permissions, пока все хорошо. Когда я не даю ему эти разрешения, он показывает мне диалоговое окно, в котором говорится, что ему нужны эти разрешения, этот диалог отображается в «onRequestPermissionsResults». Проблема в том, что на некоторых устройствах, прежде чем я дам вам ответ на разрешения, вы уже ввели метод, дав мне в результате пустой массив и попал туда, где он показывает диалог, затем я даю вам разрешения, и он больше не отображается, но это диалоговое окно не должно отображаться, пока я не укажу, даю ли я вам разрешения или нет, не раньше, у меня есть подозрения, что это происходит, когда я принудительно вращаю экран, я оставляю вам код:

Это мой метод onCreate, который я ввожу несколько раз:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    login = new LoginHelp(getBaseContext(), this, getSupportFragmentManager(), false);

    if (DiaxApplication.isSmartphone(this)) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }

    if (!isPermissionGranted()) {
        requestPermission();
    } else {
        DiaxApplication.getInstance().permissionsGranted();
    }
}

Это мой метод запроса разрешений:

private  void requestPermission() {

    // Permission is not granted
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.app_name)
                .setMessage( R.string.permission_storage_rationale)
                .setPositiveButton(R.string.dialog_button_aceptar, (dialog, which) -> ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE },
                        REQUEST_CODE_SOME_FEATURES_PERMISSIONS))
                .setCancelable(false)
                .show();

    } else {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE },
                    REQUEST_CODE_SOME_FEATURES_PERMISSIONS);
    }

}

С этим Я проверяю, активированы ли у меня разрешения:

private boolean isPermissionGranted() {
    return ((ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED  &&
            ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED ));

}

И, наконец, это мой метод onRequestPermissionsResults:

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_CODE_SOME_FEATURES_PERMISSIONS: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                DiaxApplication.getInstance().permissionsGranted();

            } else {
                showDialogMessage();
            }
        }
    }
}

Я подозреваю, что проблема заключается в принудительном вращении представления, поскольку оно продвигается и входит в «onRequestPermissionsResults», еще не указав разрешения. Посмотрим, сможешь ли ты мне помочь. Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...