Я впервые столкнулся с очень странной проблемой. Проблема в том, что мне нужны некоторые разрешения во время выполнения. Я использую приведенный ниже код для получения разрешений во время выполнения.
private void askForPermissions() {
if (!PermissionUtility.hasPermissions(this, mLoginViewModel.getPermissions())) {
ActivityCompat.requestPermissions(this, mLoginViewModel.getPermissions(), LoginViewModel.CODE_PERMISSION_ALL);
}
}
И здесь я перехватываю разрешение или отказ пользователя.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == LoginViewModel.CODE_PERMISSION_ALL) {
for (int a = 0; a < permissions.length; a++) {
if (grantResults[a] == PackageManager.PERMISSION_DENIED) {
Toast.makeText(this, "Permissions are mandatory to continue app", Toast.LENGTH_LONG).show();
askForPermissions();
return;
}
}
}
}
Вот интересная вещь. Когда я звоню askForPermissions()
, он автоматически звонит onRequestPermissionsResult()
. Ключевым моментом является то, что диалоговое окно не отображается, поэтому пользователь не предоставляет и не отклоняет разрешения. Почему на земле onRequestPermissionsResult()
вызывается?
Ниже приведен код onCreate()
, куда я звоню askForPermissions()
.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
askForPermissions();
}
Любая помощь ??