Nexus 5X 使用Zxing扫描倒立

Posted 大雄童鞋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
        

    

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

以上是关于Nexus 5X 使用Zxing扫描倒立的主要内容,如果未能解决你的问题,请参考以下文章

Zxing 库条码扫描有时会暂停或显示黑屏

android中zxing扫描条码没有声音

Android扫描二维码(基于华为HMS Core)

Android二维码工具zxing使用

zbar 扫描快,zxing 可以生成和识别本地,So,我就把他们结合在了一起,这样 Android 二维码(条形码)功能就更便捷了

android studio运行时报错AVD Nexus_5X_API_P is already running解决办法