当前位置:   article > 正文

android使用zxing实现自动对焦_android 扫码 自动对焦

android 扫码 自动对焦

接触到一个需求扫一维码的时候很难扫到,后来测试发现,是自动对焦问题。
zxing的自动对焦线程始终都在执行,但是硬件无法支持连续自动对焦,而只在扫描界面启动后进行一次对焦,而我们在扫码的时候不可能保证在同一距离下扫码。

解决方案:
1在 AutoFocusManager类中加入

//在这里插入代码片AutoStopTask autoStopTask;
  public class AutoStopTask extends AsyncTask<Object, Object, Object>{
   
 
	@Override
	protected Object doInBackground(Object... params) {
   
		 try {
   
		        Thread.sleep(AUTO_FOCUS_INTERVAL_MS);
		      } catch (InterruptedException e) {
   
		        // continue
		      }
		synchronized (AutoFocusManager.this) {
   
			start();
		}
		return null;
	}
	  
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2在 onAutoFocus方法中加上

  @Override
  public synchronized void onAutoFocus(boolean success, Camera theCamera) {
   


    if (success) {
   //自动对焦
      outstandingTask = new AutoFocusTask();

      outstandingTask.executeOnExecutor(Executors.newCachedThreadPool());
      autoStopTask = new AutoStopTask();
autoStopTask.executeOnExecutor(Executors.newCachedThreadPool());
    }
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3在stop方法添加以下代码 线程也需要每次都停止

 if(autoStopTask != null){
   
    	autoStopTask.cancel(true);
    	autoStopTask = null;
    }
  • 1
  • 2
  • 3
  • 4
  • 5

总结:原理就是利用单次自动对焦设备每次启动都会执行自动对焦的特点,重复启动关闭自动对焦功能,以达到连续自动对焦的目的。

完整类

/*
 * Copyright (C) 2012 ZXing authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/931348
推荐阅读
相关标签
  

闽ICP备14008679号