Nexus 5X 使用Zxing扫描倒立

Nexus 5X 使用Zxing扫描倒立的原因说是Nexus 5X 的摄像头是倒装的。
这里写图片描述
今天简单解决下,方案是判断机型如果是Nexus 5X,就倒立摄像头

//解决nexus5x扫码倒立的情况
        if(android.os.Build.MANUFACTURER.equals("LGE") &&
                android.os.Build.MODEL.equals("Nexus 5X")) {
            camera.setDisplayOrientation(270);
        }

这样就OK了,如图:
这里写图片描述

下面附加下手机系统详细信息

 private String getDeviceInfo(){
        StringBuffer sb =new StringBuffer();
        sb.append("主板:"+android.os.Build.BOARD);
        sb.append("\n系统启动程序版本号:"+ android.os.Build.BOOTLOADER);
        sb.append("\n系统定制商:"+android.os.Build.BRAND);
        sb.append("\ncpu指令集:"+android.os.Build.CPU_ABI);
        sb.append("\ncpu指令集2:"+android.os.Build.CPU_ABI2);
        sb.append("\n设置参数:"+android.os.Build.DEVICE);
        sb.append("\n显示屏参数:"+android.os.Build.DISPLAY);
        sb.append("\n无线电固件版本:"+android.os.Build.getRadioVersion());
        sb.append("\n硬件识别码:"+android.os.Build.FINGERPRINT);
        sb.append("\n硬件名称:"+android.os.Build.HARDWARE);
        sb.append("\nHOST:"+android.os.Build.HOST);
        sb.append("\n修订版本列表:"+android.os.Build.ID);
        sb.append("\n硬件制造商:"+android.os.Build.MANUFACTURER);
        sb.append("\n版本:"+android.os.Build.MODEL);
        sb.append("\n硬件序列号:"+android.os.Build.SERIAL);
        sb.append("\n手机制造商:"+android.os.Build.PRODUCT);
        sb.append("\n描述Build的标签:"+android.os.Build.TAGS);
        sb.append("\nTIME:"+android.os.Build.TIME);
        sb.append("\nbuilder类型:"+android.os.Build.TYPE);
        sb.append("\nUSER:"+android.os.Build.USER);
        return sb.toString();
    }

Nexus 5X 的结果如下:

主板:bullhead
系统启动程序版本号:BHZ10k
系统定制商:google
cpu指令集:arm64-v8a
cpu指令集2:
设置参数:bullhead
显示屏参数:MMB29K
无线电固件版本:M8994F-2.6.30.0.68
硬件识别码:google/bullhead/bullhead:6.0.1/MMB29K/2419427:user/release-keys
硬件名称:bullhead
HOST:wpix2.hot.corp.google.com
修订版本列表:MMB29K
硬件制造商:LGE
版本:Nexus 5X
硬件序列号:00845be94c54a76a
手机制造商:bullhead
描述Build的标签:release-keys
TIME:1447281289000
builder类型:user
USER:android-build
: config.version = 1514962991
  buidldReqConfig{ brand= LGE ,model= Nexus 5X ,os.type= 2 ,os.kernel= 3.10.7
ice bind flag:0
device when device bind flag:false

有更好的方案请各位大神告知。
https://www.zhihu.com/question/52915865

附:

如果使用的是:
https://github.com/yipianfengye/android-zxingLibrary
就找到
CaptureFragment.java 的 initCamera() 方法,找到Camera对象即可,代码如下

    private void initCamera(SurfaceHolder surfaceHolder) {
        try {
            CameraManager.get().openDriver(surfaceHolder);
            camera = CameraManager.get().getCamera();
            //解决nexus5x扫码倒立的情况
            if(android.os.Build.MANUFACTURER.equals("LGE") &&
                    android.os.Build.MODEL.equals("Nexus 5X")) {
                camera.setDisplayOrientation(270);
            }

如果使用的是:https://github.com/chentao0707/ZXingProject

找到CameraManager.java的openDriver()方法,在方法最后添加即可:

    public synchronized void openDriver(SurfaceHolder holder) throws IOException {
        Camera theCamera = camera;

        if (theCamera == null) {

            if (requestedCameraId >= 0) {
                theCamera = OpenCameraInterface.open(requestedCameraId);
            } else {
                theCamera = OpenCameraInterface.open();
            }

            if (theCamera == null) {
                throw new IOException();
            }
            camera = theCamera;
        }
        theCamera.setPreviewDisplay(holder);

        if (!initialized) {
            initialized = true;
            configManager.initFromCameraParameters(theCamera);
        }

        Camera.Parameters parameters = theCamera.getParameters();
        String parametersFlattened = parameters == null ? null : parameters.flatten(); // Save
                                                                                        // these,
                                                                                        // temporarily
        try {
            configManager.setDesiredCameraParameters(theCamera, false);
        } catch (RuntimeException re) {
            // Driver failed
            Log.w(TAG, "Camera rejected parameters. Setting only minimal safe-mode parameters");
            Log.i(TAG, "Resetting to saved camera params: " + parametersFlattened);
            // Reset:
            if (parametersFlattened != null) {
                parameters = theCamera.getParameters();
                parameters.unflatten(parametersFlattened);
                try {
                    theCamera.setParameters(parameters);
                    configManager.setDesiredCameraParameters(theCamera, true);
                } catch (RuntimeException re2) {
                    // Well, darn. Give up
                    Log.w(TAG, "Camera rejected even safe-mode parameters! No configuration");
                }
            }
        }

        //解决nexus5x扫码倒立的情况
        if(android.os.Build.MANUFACTURER.equals("LGE") &&
                android.os.Build.MODEL.equals("Nexus 5X")) {
            camera.setDisplayOrientation(270);
        }

    }

但是解决了倒立之后,确无法正常扫描,把手机倒过来才可以正常扫描,目前还没解决。

展开阅读全文

没有更多推荐了,返回首页