2010-08-19 2 views
4

У меня есть приложение, которое должно сканировать штрих-код, чтобы получить код, прежде чем он сможет продолжить.Android 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 */ 
      } 
     }); 

Вышеприведенный код делает устанавливает слушатель на кнопке с надписью «закончил» Когда кнопка нажата, отображается подсказка попросив для сканирования штрих-кода или отмены.

Нажатие кнопки «Сканирование штрих-кода» запускает новое действие, которое запускает сканирование.

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

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

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

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

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

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

Благодаря

Kevin

ответ

9

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

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

О, ну, вы живете и учитесь.

Благодаря

Kevin

+0

Ты спас меня по крайней мере час отладки с этим! Я использовал его в вложенном фрагменте ViewFlipper, и у меня была такая же проблема. Исправлена ​​ошибка с удалением одного экземпляра. – pkk

+0

@pkk Рад быть кому-то полезен! –

+0

thx! android: launchMode = "singleTask" также вызывает такую ​​проблему – thecr0w

Смежные вопросы