Android开发录Android技术文章Android

Android新兴扫码框架:XCodeScanner(持续更新)

2018-04-24  本文已影响1454人  SimonLeeeeeeeee

一个Android平台更快更简单更精准的条形码及二维码解析框架。采用ZBar解析图像数据,兼容Android4.0 (API14)及以上版本。GitHub地址

目录

示例demo

Demo下载 示例效果
点此下载 或扫描下面二维码
demo
gif

功能介绍

本项目基于ZBar进行开发,分别对视图、相机、解码三个方面进行了高度封装,同时降低三者之间的耦合,增加可灵活配置性。

UML类图

uml

集成方式

在module的build.gradle中添加如下代码

    dependencies {
        implementation 'cn.simonlee.xcodescanner:zbar:1.1.6'
    }

使用方式

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_scan_constraint);
   mTextureView = findViewById(R.id.textureview);
   mTextureView.setSurfaceTextureListener(this);
    /*
    * 注意,SDK21的设备是可以使用NewCameraScanner的,但是可能存在对新API支持不够的情况,比如红米Note3(双网通Android5.0.2)
    * 开发者可自行配置使用规则,比如针对某设备型号过滤,或者针对某SDK版本过滤
    * */
   if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {//此处示例过滤掉了SDK21
      mCameraScanner = OldCameraScanner.getInstance();
   } else {
      mCameraScanner = NewCameraScanner.getInstance();
   }
   mCameraScanner.setCameraListener(this);
}
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
   mCameraScanner.setSurfaceTexture(surface);
   mCameraScanner.setPreviewSize(width, height);
   mCameraScanner.openCamera(this.getApplicationContext());
}
public void openCameraSuccess(int frameWidth, int frameHeight, int frameDegree) {
   mTextureView.setImageFrameMatrix(frameWidth, frameHeight, frameDegree);
   if (mGraphicDecoder == null) {
      mGraphicDecoder = new ZBarDecoder();//使用带参构造方法可指定条码识别的格式
      mGraphicDecoder.setDecodeListener(this);
   }
   //调用setFrameRect方法会对识别区域进行限制,注意getLeft等获取的是相对于父容器左上角的坐标,实际应传入相对于TextureView左上角的坐标。
   mCameraScanner.setFrameRect(mScannerFrameView.getLeft(), mScannerFrameView.getTop(), mScannerFrameView.getRight(), mScannerFrameView.getBottom());
   mCameraScanner.setGraphicDecoder(mZBarDecoder);
}
public void decodeSuccess(int type, int quality, String result) {
   ToastHelper.showToast("[类型" + type + "/精度" + quality + "]" + result, ToastHelper.LENGTH_SHORT);
}
public void onDestroy() {
   mCameraScanner.setGraphicDecoder(null);
   mCameraScanner.detach();
   if (mGraphicDecoder != null) {
      mGraphicDecoder.setDecodeListener(null);
      mGraphicDecoder.detach();
   }
   super.onDestroy();
}
public void onPause() {
   mCameraScanner.closeCamera();
   super.onPause();
}
public void onRestart() {
   //部分机型在后台转前台时会回调onSurfaceTextureAvailable开启相机,因此要做判断防止重复开启
   if (mTextureView.isAvailable()) {
      mCameraScanner.setSurfaceTexture(mTextureView.getSurfaceTexture());
      mCameraScanner.setPreviewSize(mTextureView.getWidth(), mTextureView.getHeight());
      mCameraScanner.openCamera(this.getApplicationContext());
   }
   super.onRestart();
}

更新计划

版本记录

关于作者

这是我个人的第一个开源项目,慢慢悠悠也投入了不少精力。在开源的过程中碰到了许多疑点难点,其中借鉴了很多大神的成果。在这里向那些为开源默默奉献的大神们致敬!谢谢你们!

如果在使用过程中遇到了闪退、黑屏、无法识别、无法对焦、预览掉帧、内存泄漏等任何异常问题,欢迎提Issues!同时请尽量附上设备型号、android版本号、BUG复现步骤、异常日志、无法识别的图像等,我会尽快安排解决。

如果您觉得有用,请动动小手给我一个Star来点鼓励吧

Author E-mail GitHub WeChat
Simon Lee jmlixiaomeng@163.com XCodeScanner wechat
上一篇下一篇

猜你喜欢

热点阅读