Посмотрим, сможешь ли ты помочь мне. У меня есть приложение, которое при запуске требует от меня некоторого хранилища 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», еще не указав разрешения. Посмотрим, сможешь ли ты мне помочь. Большое спасибо.