окно запроса разрешения принудительно остановить приложение


Мне нужно вручную запросить разрешение для API уровня 23 и где появляется диалоговое окно и приложение переходит в фоновый режим.

Вот мой код:

  @Override
    public void onDialogDone(int dialog, boolean result) {
        DialogFragment newFragment;

        switch (dialog) {
            case EULA_DIALOG:
                if (result) {

                    boolean numberExists = _appRegistration.checkPhoneNumber();
                    if (!numberExists) {
                        ActivityCompat.requestPermissions(MainActivity.this,
                                new String[]{Manifest.permission.READ_PHONE_STATE},
                                MY_PERMISSIONS_PHONE_STATE_READ);
                        return;
                    } else {
                        //do some work
                    }
                } else {
                    Intent intent = new Intent(...);
                    startActivity(intent);
                    finish();


                 }


                       break;.... 
  }
}

Кроме того, в MainActivity я переопределил следующий метод:

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case MY_PERMISSIONS_PHONE_STATE_READ: {    
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                   // do some work
                } else {

                    // do some work
                }

                return;
            }

        }

Но если я нажимаю "разрешить" или "запретить", этот метод не вызывается, потому что приложение находится в фоновом режиме... Я зарегистрировал методы onPause и onStop, и оба они вызываются после отображения окна разрешений.

Введите описание изображения здесь

2 2

2 ответа:

Возникла проблема MainActivity, в файле манифеста она была настроена следующим образом:

Android: noHistory= "true"

Я просто удалил это свойство, и приложение начало работать, как и ожидалось.

Попробуйте с этим

      if (!numberExists) {
                    ActivityCompat.requestPermissions(getActivity(),
                            new String[]{Manifest.permission.READ_PHONE_STATE},
                            MY_PERMISSIONS_PHONE_STATE_READ);
                    return;

Таким образом, вы начинаете запрос с вашего действия, и обратные вызовы будут получены.