Как обработать пользовательский ответ для ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS?

На данный момент я спрашиваю пользователя о возможностях приложения для экономии заряда батареи:

public void startSessionClick(View view) {

        String token = MyApp.getInstance().getPrefToken();
        if (!TextUtils.isEmpty(token)) {
            throw new RuntimeException("Token is not empty");
        }

        //todo hot-fix
        if (checkBatteryOptimization()) {
            Intent intent = new Intent(this, AuthEnterPhoneActivity.class);
            startActivityForResult(intent, REQUEST_CODE_ENTER_PHONE);
        } else {
            String packageName = getApplicationContext().getPackageName();
            Intent intent = new Intent();
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
            intent.setData(Uri.parse("package:" + packageName));
            getApplicationContext().startActivity(intent);
            //handleAnswer();
            startSessionClick(null);
        }
    }

Как отследить соглашение или отказ от диалога?

В тот момент, когда по соглашению я просто открываю следующую активность (предварительно проверяя стоковые настройки) и если пользователь отказывается, то снова показываю это диалоговое окно.

Трек мне нужен для того, что бы в случае невозможности отобразить диалог с объяснениями.

1 ответ

В своей деятельности вы можете переопределить функцию onActivityResult. Он будет вызываться фреймворком и передавать параметр resultCode

      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode == REQUEST_CODE_ENTER_PHONE) {
         if (resultCode == RESULT_OK) {
             // user accepted the permission request
             ...
         }
     }

См. https://developer.android.com/reference/android/app/Activity#onActivityResult(int,%20int,%20android.content.Intent)

Другие вопросы по тегам