Nexus Android8 0系统拍照预览方向问题解决方法

Nexus

Nexus 手机 原生Android系统 Android 8.0android

问题

测试发如今Nexus手机,android8.0手机上发现,扫码的时候显示的拍照预览方向不正,有180度的旋转而且变形。 可是在其余手机及系统上测试是没有问题的。安全

解决

仍是依旧Stack Overflow啊。 亲测完美解决此问题。bash

private void surfaceIsChanged() {
        if (mHolder.getSurface() == null) {
            System.out.println("getSurface,nullnull");
            return;
        }
        try {
            mCamera.stopPreview();
        } catch (Exception e) {
        }
        try {
            Camera.Size previewSize = mCamera.getParameters().getPreviewSize();
            int dataBufferSize = (int) (previewSize.height * previewSize.width * (ImageFormat.getBitsPerPixel(mCamera.getParameters()
                    .getPreviewFormat()) / 8.0));
            mCamera.addCallbackBuffer(new byte[dataBufferSize]);
            mCamera.setPreviewDisplay(mHolder);
            mCamera.setPreviewCallbackWithBuffer(previewCallback);
            mCamera.startPreview();
            mCamera.autoFocus(autoFocusCallback);


            Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
            int camIdx = 0; // DO your logic to get front or back camera...or loop through all avaialable.
            Camera.getCameraInfo(camIdx, cameraInfo);

            try {
                // If using back camera then simply rotate what CameraInfo tells you.
                if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK)
                    mCamera.setDisplayOrientation(cameraInfo.orientation);
                else
                    // If using front camera note that image might be flipped to give users the impresion the are looking at a mirror.
                    mCamera.setDisplayOrientation( (360 - cameraInfo.orientation) % 360);
            } catch (Exception e) {
                e.printStackTrace();
            }

            // Toast.makeText(QRZbarActivity.this, "开始扫描",
            // Toast.LENGTH_SHORT).show();
            autoOpenLight();
        } catch (Exception e) {
            Toast.makeText(BaseScanActivity.this, R.string.account_toast_not_open_camera, Toast.LENGTH_SHORT).show();
//			showTip("您未容许" + getResources().getString(R.string.app_name) + "访问您的相册\n请在“安全中心 -受权管理”中更改设置");
            Log.d("DBG", "Error starting camera preview: " + e.getMessage());
        }
    }
复制代码

其中主要生效的代码是:app

Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
            int camIdx = 0; // DO your logic to get front or back camera...or loop through all avaialable.
            Camera.getCameraInfo(camIdx, cameraInfo);

            try {
                // If using back camera then simply rotate what CameraInfo tells you.
                if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK)
                    mCamera.setDisplayOrientation(cameraInfo.orientation);
                else
                    // If using front camera note that image might be flipped to give users the impresion the are looking at a mirror.
                    mCamera.setDisplayOrientation( (360 - cameraInfo.orientation) % 360);
            } catch (Exception e) {
                e.printStackTrace();
            }
复制代码

根据照相的内容进行设置显示方向。oop

参考:解决方法测试

// END 2018年4月19日ui

相关文章
相关标签/搜索