Почему onActivityResult запускается еще до начала активности?

У меня есть приложение, которому необходимо отсканировать штрих-код, чтобы получить код, прежде чем он сможет продолжить работу. Я использую этот код для запуска сканирования:

finish = (Button) findViewById(R.id.finishButton);
        finish.setOnClickListener(new OnClickListener() {
            public void onClick(View viewParam) {

                /*Prompt the user to scan the barcode */
                new AlertDialog.Builder(Visit.this)
                .setMessage("Please Scan the clients barcode to complete the visit")
                .setPositiveButton("Scan Barcode", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //Start the scan application
                        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                        startActivityForResult(intent, 0);
                    }
                })

                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //Execute some method call
                        Toast.makeText(Visit.this, "Scan declined...", Toast.LENGTH_SHORT).show();
                    }
                })
                .show();
                /* End of Scan prompt */
            }
        });

Приведенный выше код устанавливает прослушиватель на кнопку с меткой finished. При нажатии кнопки отображается запрос, предлагающий пользователю отсканировать штрих-код или отменить.

Щелчок по кнопке Сканировать штрих-код запускает новое действие, которое запускает сканирование.

У меня есть следующий код, настроенный для чтения результата сканирования при возврате из сканирования:

/* Return from scanning barcode */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
;
      if (resultCode == Activity.RESULT_OK && requestCode == 0) {
        Bundle extras = data.getExtras();
        String result = extras.getString("SCAN_RESULT");
      }
      Toast.makeText(Visit.this, "request code: "+requestCode+" result code = "+resultCode+ "\nRESULT_OK: "+Activity.RESULT_OK, Toast.LENGTH_SHORT).show();
    }

Что очень просто (на данный момент) выводит результат действия в виде всплывающего сообщения.

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

Процесс сканирования работает нормально, так как я вижу результаты сканирования в logcat., Однако, поскольку он запускается слишком рано, метод onActivityResult никогда не получает результат сканирования, а код результата всегда -1

Я пропустил здесь шаг? есть ли способ добраться до onActivityResult, чтобы дождаться фактического завершения действия?


person Kevin Bradshaw    schedule 19.08.2010    source источник


Ответы (1)


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

Удаление условия единственного экземпляра позволило мне взломать его, и он отлично работает.

person Kevin Bradshaw    schedule 19.08.2010
comment
Благодаря этому вы сэкономили мне как минимум час отладки! Я использовал его во вложенном фрагменте ViewFlipper, и у меня была такая же проблема. Удаление единственного экземпляра устранило эту проблему. - person pkk; 16.06.2013
comment
@pkk Рад, что был кому-то полезен! - person Kevin Bradshaw; 19.06.2013
comment
Спасибо! android: launchMode = singleTask также вызывает такого рода проблемы - person thecr0w; 16.07.2014