android使用zxing在单次自动对焦设备上支持连续对焦
来源:互联网 发布:mac 数据作图软件 编辑:程序博客网 时间:2024/05/01 08:09
版本
zxing-2.3.0
测试onda平板 系统4.3
之前接触到一个需求,在一个平板设备上开发一个超市使用的pad端,扫码功能开发支持扫描商品条形码跳转到商品详情页面
问题:
扫描二维码没有问题,但是扫描条码很难扫描到,后来测试发现,是自动对焦问题,平板的支持的是AFC自动对焦,也就是单次自动对焦,而扫描二维码需要连续自动对焦 才能有效识别条形码。zxing的自动对焦线程始终都在执行,但是硬件无法支持连续自动对焦,而只在扫描界面启动后进行一次对焦,而我们在扫码的时候不可能保证在同一距离下扫码。
解决方案:
1、打开zxing源码中的camera包下的AutoFocusManager.java
2、在文件中插入如下代码:
AutoStopTask autoStopTask; public class AutoStopTask extends AsyncTask<Object, Object, Object>{@Overrideprotected Object doInBackground(Object... params) { try { Thread.sleep(AUTO_FOCUS_INTERVAL_MS); } catch (InterruptedException e) { // continue }synchronized (AutoFocusManager.this) {stop();}return null;} }3、找到onAutoFocus函数覆盖原函数内容为:
if (active) { outstandingTask = new AutoFocusTask();// outstandingTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); outstandingTask.executeOnExecutor(Executors.newCachedThreadPool()); autoStopTask = new AutoStopTask();// autoStopTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); autoStopTask.executeOnExecutor(Executors.newCachedThreadPool()); }看注释掉部分:executeOnExecutor这个函数是API11后提供的新函数,内部传入参数AsyncTask.THREAD_POOL_EXECUTOR是设定线程可以并发,但是不能超过5个,这样会对我们新修改的代码造成线程阻塞,对焦几次后边不会再自动对焦了,所以要做修改,不限制线程的并发(目前测试没有问题,不知道会不会因为线程回收不即使导致程序崩溃)。
4、找到stop函数增加如下代码:
if(autoStopTask != null){ autoStopTask.cancel(true); autoStopTask = null; }我们的线程也需要每次都停止。
到这里zxing就可以支持单次自动对焦的设备连续自动对焦了。
基本原理就是利用单次自动对焦设备每次启动都会执行自动对焦的特点,重复启动关闭自动对焦功能,以达到连续自动对焦的目的。
以上内容为原创,纯属记录,如果有大神看到有更加好的解决办法,可以留言交流一下。
1 0
- android使用zxing在单次自动对焦设备上支持连续对焦
- 自动对焦 AF(上)
- 单次自动对焦(ONE SHOT)、人工智能自动对焦(AI FOCUS)、人工智能伺服自动对焦(AI SERVO)的区别
- 自动对焦
- 自动对焦
- android实现自动对焦拍照
- android手动实现相机功能,自动对焦+手动对焦
- 对焦
- 【Android】自定义相机的实现(支持连续拍照、前后摄像头切换、连续对焦)
- 单区域对焦 AF
- 自动对焦算法
- 摄像头的自动对焦
- 相机自动对焦原理
- 摄像头自动对焦
- Camera自动对焦
- 自动对焦的原理
- AR 摄像机自动对焦
- 相机自动对焦(草稿)
- html+css+js系列之四 css的盒子模型
- Android中shape的使用
- 二叉树非递归建树
- 二叉树的建立和基本操作
- 项目管理的最高境界是管理好自己的人生
- android使用zxing在单次自动对焦设备上支持连续对焦
- 第12周项目3 利用递归函数求解(4、Fibnacci序列的第20个数)
- [数据库]Bulk Insert命令详细
- Java删除文件夹和文件
- Next permutation: When C++ gets it right
- web开发常见性能优化方式
- 第十二周项目3——6 汉诺塔的移动
- linux md5校验
- 几种流形学习算法