android - android zbar 中的相机黑屏

标签 android barcode-scanner zbar

我一直在我的一个 android 项目中工作,我需要在其中集成 Zbar扫描器。我在项目中集成了 Zbar 扫描仪。我面临的问题有时是在 Samsung Tab 3 中扫描仪区域显示黑屏。它在其他设备上运行良好。我已经检查了 nexus、canvas 之类的设备,它显示了完美的扫描屏幕。我的代码有什么问题吗?这是我的代码。

private void initControls() {
        try {

            {
                System.loadLibrary("iconv");
            }

            surfaceViewFlash = (SurfaceView) mView.findViewById(R.id.PREVIEW);
            surfaceViewFlash.setVisibility(View.INVISIBLE);
            surfaceViewFlash.setVisibility(View.VISIBLE);
            mCameraScanner = getCameraInstance();
            getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            previewingScanner = true;
            autoFocusHandlerScanner = new Handler();

            try {
                // Instance barcode zBarScanner
                zBarScanner = new ImageScanner();

                zBarScanner.setConfig(0, Config.X_DENSITY, 3);
                zBarScanner.setConfig(0, Config.Y_DENSITY, 3);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }

            mPreviewScanner = new CameraPreview(getActivity(), mCameraScanner, previewCb, autoFocusCB);
            FrameLayout preview = (FrameLayout) mView.findViewById(R.id.cameraPreview);
            preview.addView(mPreviewScanner);

            if (barcodeScanned) {
                barcodeScanned = false;
                mCameraScanner.setPreviewCallback(previewCb);
                mCameraScanner.startPreview();
                previewingScanner = true;
                Log.e("initControls", "initControls");
            }

        } catch (IllegalArgumentException e) {
            e.printStackTrace();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


 /**
     * A safe way to get an instance of the Camera object.
     */
    public Camera getCameraInstance() {
        Camera c = null;
        int frontId = 0, backId = 0;
        try {


            Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
            int numberOfCameras = Camera.getNumberOfCameras();
            for (int i = 0; i < numberOfCameras; i++) {
                Camera.getCameraInfo(i, cameraInfo);
                if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                    frontId = i;
                } else if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
                    backId = i;
                }

            }
            c = Camera.open(backId);
        } catch (Exception e) {
            e.printStackTrace();
            GeneralAlertDialog.createDialog(getActivity(), getString(R.string.app_name), "Camera is not working, Please try again.", new DialogDismiss() {
                @Override
                public void onDismiss() {
                    getCallBackForCloseScanner().OnCloseButtonClickOfScanner();
                }
            });

        }
        return c;
    }

 private void releaseCamera() {
        if (mCameraScanner != null) {
            mCameraScanner.cancelAutoFocus();
            previewingScanner = false;
            mCameraScanner.setPreviewCallback(null);
            mPreviewScanner.getHolder().removeCallback(mPreviewScanner);
            mCameraScanner.stopPreview();
            mCameraScanner.release();
            mCameraScanner = null;
            mPreviewScanner = null;
        }
    }

 Runnable doAutoFocus = new Runnable() {
        public void run() {

            try {
                if (previewingScanner) {
                    if (mCameraScanner == null)
                        mCameraScanner = getCameraInstance();
                    Camera.Parameters parameters = null;
                    Log.e("mCameraScanner", mCameraScanner + "");

                    if (null != mCameraScanner.getParameters()) {
                        parameters = mCameraScanner.getParameters();
                    }
                    List<String> focusModes = parameters.getSupportedFocusModes();
                    if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
                        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
                        mCameraScanner.setParameters(parameters);
                        mCameraScanner.autoFocus(autoFocusCB);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

请帮我解决这个问题。

最佳答案

releaseCamera 暂停并销毁。当相机未被任何资源释放并且您再次启动它时会发生这种情况。希望这对您有所帮助。

关于android - android zbar 中的相机黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32824547/

相关文章:

swift - 如何使用CIFilter生成dataMatrix?

使用 Zbar 确定 QR 码角位置的 Python 代码

ios - xcode 6 - 未找到架构 i386 (zbar) 的符号

python - heroku无法安装zbar

java - 如何使 DatePickerDialog 的 setMinDate 与 "setCurrentDate"不同?

java - 阻止 Android Studio 隐藏/缩短代码?

android - 调整 ImageView 的大小以使整个布局填满屏幕

android - AlertDialog getButton() 方法返回 null

google-chrome-devtools - 为什么条码扫描器会在 chrome 中打开 Chrome 开发者控制台?

c# - 如何使用 C# 在 Windows 窗体中生成随机数和条形码?