简体   繁体   English

android zbar中的相机黑屏

[英]Camera black screen in android zbar

I have been working in one of my android project in which I need to integrate Zbar scanner.我一直在我的一个 android 项目中工作,我需要在其中集成Zbar扫描仪。 I have integrated Zbar scanner in project.我在项目中集成了 Zbar 扫描仪。 The problem I am facing is sometimes in Samsung Tab 3 has scanner area shows black screen.我面临的问题有时是三星 Tab 3 的扫描仪区域显示黑屏。 It is working perfectly in other devices.它在其他设备上运行良好。 I have checked in nexus,canvas like devices and it shows perfect scanning screen.我已经检查了 nexus、canvas 之类的设备,它显示了完美的扫描屏幕。 Is there any problem in my code?我的代码有问题吗? Here is my code.这是我的代码。

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

Please help me out to solve the problem.请帮我解决问题。

releaseCamera on pause and on destroyed. releaseCamera 暂停和销毁。 it happen when camera is not release by any resource and you are again starting it.hope this will help you.当相机没有被任何资源释放并且您再次启动它时会发生这种情况。希望这会对您有所帮助。

It's late, but this finally helped me, after overlooking the obvious.已经很晚了,但是在忽略了显而易见的事情之后,这终于帮助了我。

Make sure you have camera permission for your app.确保您拥有应用的相机权限。 It must be enabled not only through the camera permission declaration in the manifest file, BUT you also have to make sure you grant your app access to your camera by Android OS.它不仅必须通过清单文件中的相机权限声明来启用,而且您还必须确保您的应用程序可以通过 Android 操作系统访问您的相机。 Go to Preferences -> Apps -> Your App -> Permissions -> Allow camera access.转到首选项 -> 应用程序 -> 您的应用程序 -> 权限 -> 允许相机访问。

Starting from Android 6.0 (API 23), users are not asked for permissions at the time of installation rather developers need to request the permissions at the run time.从 Android 6.0 (API 23) 开始,用户在安装时无需请求权限,开发人员需要在运行时请求权限。 Only the permissions that are defined in the manifest file can be requested at run time.在运行时只能请求清单文件中定义的权限。 Request camera permission like here !.这里一样请求相机许可!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM