Разрешения во время выполнения: onRequestPermissionsResult вызывается без запроса пользователя - PullRequest
0 голосов
/ 17 февраля 2020

Я впервые столкнулся с очень странной проблемой. Проблема в том, что мне нужны некоторые разрешения во время выполнения. Я использую приведенный ниже код для получения разрешений во время выполнения.

 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();
}

Любая помощь ??

...