Zbar com Android: A viewport da câmera do scanner permanece inativa e preta depois de mostrar o URL no navegador

Eu preciso ter um scanner QR no meu projeto. Eu uso o ZBar para fazer essa tarefa. Principalmente eu fiz uma pequena alteração no código de exemplo dado pelo exemplo do ZBar git para fazer o trabalho. Eu preciso mostrar o resultado digitalizado em um navegador (se url) ou em um diálogo (se a informação normal).

Tudo funciona bem com o meu código dado abaixo, exceto se eu tentar mostrar a URL depois de digitalizar um código qr no navegador. Quando eu volto ao meu aplicativo pelo navegador, a janela de exibição da câmera fica preta e permanece inativa. Eu tentei voltar a câmera ativa para digitalizar outro código qr, mas eu falhei. Eu tentei reabrir a câmera na minha função onResume (), mas isso causa erro e vigorosamente saiu do aplicativo. Por favor me ajude nessa questão.

    package com.myapp;
    import net.sourceforge.zbar.Config;
    import net.sourceforge.zbar.Image;
    import net.sourceforge.zbar.ImageScanner;
    import net.sourceforge.zbar.Symbol;
    import net.sourceforge.zbar.SymbolSet;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.pm.ActivityInfo;
    import android.hardware.Camera;
    import android.hardware.Camera.AutoFocusCallback;
    import android.hardware.Camera.PreviewCallback;
    import android.hardware.Camera.Size;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Handler;
    import android.webkit.URLUtil;
    import android.widget.FrameLayout;

    import com.myapp.CameraPreview;
    /* Import ZBar Class files */

    public class QRScannerActivity extends Activity
    {
        private Camera mCamera;
        private CameraPreview mPreview;
        private Handler autoFocusHandler;

        ImageScanner scanner;

        private boolean barcodeScanned = false;
        private boolean previewing = true;

        static {
            System.loadLibrary("iconv");
        } 

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.qr_scanner_main);

            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            autoFocusHandler = new Handler();
            mCamera = getCameraInstance();

            /* Instance barcode scanner */
            scanner = new ImageScanner();
            scanner.setConfig(0, Config.X_DENSITY, 3);
            scanner.setConfig(0, Config.Y_DENSITY, 3);

            mPreview = new CameraPreview(this, mCamera, previewCb, autoFocusCB);
            FrameLayout preview = (FrameLayout)findViewById(R.id.cameraPreview);
            preview.addView(mPreview);
        }

        @Override
        protected void onPause() {
            super.onPause();
            releaseCamera();
            //finish();
        }

        /** A safe way to get an instance of the Camera object. */
        public static Camera getCameraInstance(){
            Camera c = null;
            try {
                c = Camera.open();
            } catch (Exception e){
            }
            return c;
        }

        private void releaseCamera() {
            //Toast.makeText(QRScannerActivity.this, "Paused State", Toast.LENGTH_SHORT).show();
            if (mCamera != null) {
                previewing = false;
                mCamera.setPreviewCallback(null);
                mPreview.getHolder().removeCallback(mPreview);
                mCamera.release();
                mCamera = null;
            }

        }

        private Runnable doAutoFocus = new Runnable() {
                public void run() {
                    if (previewing)
                        mCamera.autoFocus(autoFocusCB);
                }
            };

        PreviewCallback previewCb = new PreviewCallback() {
                public void onPreviewFrame(byte[] data, Camera camera) {
                    Camera.Parameters parameters = camera.getParameters();
                    Size size = parameters.getPreviewSize();

                    Image barcode = new Image(size.width, size.height, "Y800");
                    barcode.setData(data);

                    int result = scanner.scanImage(barcode);
                    String QRScannerResult;

                    if (result != 0) {
                        previewing = false;
                        mCamera.setPreviewCallback(null);
                        mCamera.stopPreview();

                        SymbolSet syms = scanner.getResults();
                        for (Symbol sym : syms) {
                            QRScannerResult = sym.getData();
                            showResultAction(QRScannerResult);
                            barcodeScanned = true;

                        }
                    }
                }
            };

        // Mimic continuous auto-focusing
        AutoFocusCallback autoFocusCB = new AutoFocusCallback() {
                public void onAutoFocus(boolean success, Camera camera) {
                    autoFocusHandler.postDelayed(doAutoFocus, 1000);
                }
            };

        private void showResultAction(String QRScannerResult){
                if (URLUtil.isValidUrl(QRScannerResult)) {

                    if (barcodeScanned) {
                        barcodeScanned = false;
                        mCamera.setPreviewCallback(previewCb);
                        mCamera.startPreview();
                        previewing = true;
                        mCamera.autoFocus(autoFocusCB);
                    }

                    Intent i = new Intent(Intent.ACTION_VIEW);
                    i.setData(Uri.parse(QRScannerResult));
                    startActivity(i);

                    }else {
                        new AlertDialog.Builder(this)
                        .setTitle("QR Data")
                        .setMessage(QRScannerResult)
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) { 
                                if (barcodeScanned) {
                                    barcodeScanned = false;
                                    mCamera.setPreviewCallback(previewCb);
                                    mCamera.startPreview();
                                    previewing = true;
                                    mCamera.autoFocus(autoFocusCB);
                                }
                            }
                         })
                         .show();
                    }

        }
    }

Desde já, obrigado. Sakib

questionAnswers(1)

yourAnswerToTheQuestion