Черный экран камеры в android zbar

Я работаю над одним из своих проектов для Android, в который мне нужно интегрировать сканер Zbar. Я интегрировал сканер Zbar в проект. Проблема, с которой я сталкиваюсь, заключается в том, что иногда на вкладке Samsung 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();
            }
        }
    };

Пожалуйста, помогите мне решить проблему.


person Hitesh Kamani    schedule 28.09.2015    source источник
comment
у меня тоже такая проблема? На Моем ноте 5 камера чёрная.   -  person Zapnologica    schedule 05.10.2016


Ответы (1)


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

person Satyavrat    schedule 28.09.2015
comment
Спасибо за ответ, я сделал кодирование для выпуска камеры в onPause. - person Hitesh Kamani; 29.09.2015
comment
Нет, проблема осталась. - person Hitesh Kamani; 29.09.2015