Сканер штрих-кода ZXing не работает в ActivityGroup - PullRequest
0 голосов
/ 04 августа 2011

Я создал небольшое приложение tabActivity и хотел запускать zxing и отображать результат без изменения вкладки с помощью ActivityGroup.Все отлично работает без ActivityGroup.

А вот код моей ScanActivity.Если я «включу» ActivityGroup, я никогда не столкнусь с onActivityResult ...:

  class ScanButtonClickListener implements OnClickListener {
        @Override
        public void onClick(View v) {
            IntentIntegrator.initiateScan(BarcodeActivity.this);
        }
    }  

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
           IntentResult scanResult = 
                IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
           Log.v("barcode", scanResult.getContents().toString());
   }

Вот части манифеста:

activity android:name=".barcode.BarcodeActivity"
 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
 android:screenOrientation="portrait">
</activity>     
<activity android:name=".tabGroups.BarcodeTabGroupActivity"></activity> 

и TabGroupActivity, которые толькозапускает barcodeActivity на данный момент:

public class BarcodeTabGroupActivity extends TabGroupActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startChildActivity("BarcodeActivity", new Intent(this, BarcodeActivity.class));
    }
}

и отфильтрованный журнал:

08-04 15: 59: 02.093: DEBUG / DecodeHandler (4477): обнаружен штрих-код за 1 мс
08-04 15: 59: 02.144: DEBUG / CaptureActivityHandler (4477): получено сообщение об успешном декодировании
08-04 15: 59: 03.792: DEBUG / CaptureActivityHandler (4477): получено сообщение о результате сканирования возврата
android :: CameraHardwareSec :: stopPreview (): предварительный просмотр не выполняется, ничего не происходит
08-04 15: 59: 03.941: INFO / WindowManager (109): установка поворота на 0, animFlags = 1
08-04 15: 59: 03.957: INFO / ActivityManager (109): конфигурация изменена: {масштаб = 1,0 imsi = 0/0 loc = en_US touch = 3 клавиши = 1/1/2 nav = 1/1 ориентация = 1 макет = 34 uiMode =17 seq = 72}

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

Есть советы?заранее спасибо !!

1 Ответ

1 голос
/ 10 августа 2011

Хорошо, мне удалось решить эту проблему самостоятельно. Для всех, кто интересуется моим решением, вот оно:

Вместо того, чтобы инициировать проверку дочернего действия "BarcodeActivity", я сослался на это родительское действие:

class ScanButtonClickListener implements OnClickListener {
    @Override
    public void onClick(View v) {
            //get the parent activity
        TabGroupActivity parentActivity = (TabGroupActivity) getParent();
        IntentIntegrator.initiateScan(parentActivity);
    }
}  

И теперь можно получить доступ к результату через onActivityResult в родительском BarcodeTabGroupActivity:

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    Log.v("barcode_tabgroup", scanResult.getContents().toString());
  }

В этом onActivityResult теперь я могу запустить следующую дочернюю функцию для обработки результатов сканирования ... не знаю, хорошая ли это практика, но она работает.

Я думал, что должен завершить другое дочернее действие, используя

BarcodeActivity childActivity = (BarcodeActivity) getCurrentActivity();
childActivity.finish();

но потом все сбивает ..

...