Странная проблема с намерением startActivity, которая заставляет мой сканер работать неправильно

Итак, после того, как я закончил свою работу с

btn_take_photo.setOnClickListener(new FloatingActionButton.OnClickListener() { @Override public void onClick(View view) { String carde = cardnumberbox.getText().toString().trim(); if (carde.matches("")) { Toast.makeText(getApplicationContext(), getString(R.string.Skan_Udfyld_Kort_Nummer), Toast.LENGTH_SHORT).show(); cardnumberbox.requestFocus(); return; } Intent i = new Intent(ScanActivity.this, CameraActivity.class); i.putExtra("EXTRA_SESSION_ID", carde); startActivity(i); } }); 

Чтобы перейти к моей работе с камерой, чтобы я мог сделать несколько снимков и вернуться с

  public void btn_aprove2(View view) { Intent i = new Intent(CameraActivity.this, ScanActivity.class); String counts = count.getText().toString().trim(); i.putExtra("EXTRA_SESSION_IDs", counts); String carde = cardnumberbox2.getText().toString().trim(); i.putExtra("EXTRA_SESSION_ID", carde); startActivity(i); finish(); 

К активности сканера снова. Мой сканер работает неправильно, но если я затем нажмем кнопку «Назад», он снова вернется к активности scanner вместо моего меню, так что похоже, что активность scanner работает дважды, и только 1 из них функциональны, но здесь, где это смущает меня

Потому что если не нажимать кнопку btn_aprove2 и просто использовать кнопку «Назад», я btn_aprove2 точно такую ​​же проблему, но здесь моя активность сканера не запускается дважды, так как когда я нажимаю кнопку «Назад», она просто возвращает меня обратно в меню

Видео о проблеме

Удалив ориентацию экрана из манифеста (так что я могу повернуть его), мой сканер теперь работает, но только если я сначала повернусь к пейзажу и поверну его обратно в кайт

И я вижу в журнале, что он только вызывает oncreate при вращении и только при возобновлении и паузе на кнопке (startactivity / finnish)

Я полностью потерял, как заставить это работать.

На github с api demo и документацией в вики и с использованием классов thoose, которые используются

Если вы просто перейдете к активности камеры, чтобы получить некоторые данные, я бы рекомендовал вам начать работу с результатом (startActivityForResult), не закончив вообще действие Scanner. Это даст вам правильный рабочий стоп (с помощью кнопки «Назад», чтобы вернуться с камеры на сканер).

Кроме того, почему вы используете i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ? Вы начинаете новую деятельность и заканчиваете старую. Я не понимаю, почему этот флаг действительно нужен. Какой у вас android:launchMode в манифесте, и вы уверены, что знаете, что делает FLAG_ACTIVITY_NEW_TASK , и это то, что вы хотите?

В любом случае, из того, что вы нам сказали, похоже, что ваш пример действительно должен использовать startActivityForResult() без вызова finish() :

  1. Нажмите кнопку меню на какой-либо операции
  2. Запустите камеру и сделайте что-нибудь
  3. Нажмите кнопку, чтобы запустить сканер
  4. Сканируйте что-нибудь и завершите сканирование с результатом (или отмените сканирование, щелкнув по нему)
  5. Получить результат сканера в камере и сделать что-то с ним или продолжить предыдущий рабочий процесс, когда сканер был отменен
  6. Как только вы закончите свой рабочий процесс, завершите камеру, чтобы вы оказались в своей деятельности, где вы запустили камеру