我为Android 3.1编写了一个摩托罗拉Xoom平板电脑的应用程序,用于我的硕士论文,可以用它的相机实时扫描多个QR码,并在显示屏上通过识别的QR码显示其他信息。
使用ZXing安卓应用程序(http://code.google.com/p/zxing/)进行识别,我基本上只是更改了ZXing应用程序的代码,以便它可以同时识别多个QR码并可以连续扫描,而无需像原始应用程序一样成功扫描后冻结。所以我的应用程序基本上是ZXing应用程序,可以连续扫描多个QR码。
但我遇到了一个问题:
ZXing应用程序可以进行某种连续自动对焦。它开始了 自动对焦,当它完成后,它会自动启动 再次自动对焦。但这种方法不知何故使相机亮度 设置太亮,使相机无法识别QR 代码因为图像几乎完全是白色的。禁用自动对焦可以解决问题,但我需要自动对焦,因为否则只能在一定距离内识别QR码。
答案 0 :(得分:5)
我在三星Galaxy Grand 2(Android 4)上遇到了同样的问题,我找到了一个解决方案。在启动相机之前禁用自动对焦功能。 1-2秒后我启用它。我尝试了几种方法,并决定定期切换自动对焦功能。为了实现这一点,我创建了util类--FocusHandler。
public class FocusHandler implements Runnable{
private final int FOCUS_OFF_TIME = 2000;
private final int FOCUS_ON_TIME = 20000;
private boolean flag = false;
private boolean state = false;
private Handler handler;
private WeakReference<ZXingScannerView> scannerView;
public FocusHandler(Handler handler, ZXingScannerView scannerView){
this.handler = handler;
this.flag = false;
this.scannerView = new WeakReference<>(scannerView);
}
public void start(){
state = true;
this.handler.post(this);
}
public void stop(){
state = false;
scannerView.clear();
}
@Override
public void run() {
if (!state || this.scannerView.get() == null){
return;
}
int time;
if (!flag){
this.scannerView.get().setAutoFocus(flag);
time = FOCUS_OFF_TIME;
}
else{
this.scannerView.get().setAutoFocus(flag);
time = FOCUS_ON_TIME;
}
flag = !flag;
handler.postDelayed(this, time);
}
}
/ ***************活动****************** /
private ZXingScannerView scannerView;
private FocusHandler focusHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scanner);
scannerView = new ZXingScannerView(this);
focusHandler = new FocusHandler(new Handler(), scannerView);
frameLayout.addView(scannerView);
}
@Override
protected void onResume() {
super.onResume();
scannerView.setResultHandler(this);
scannerView.setAutoFocus(false);
scannerView.startCamera();
focusHandler.start();
}
@Override
public void onPause() {
super.onPause();
scannerView.stopCamera();
focusHandler.stop();
}
答案 1 :(得分:3)
我已经在邮件列表上回答了这个问题。
该应用无法改变相机预览的“质量”:您的意思是解决方案吗?分辨率不是限制因素。也许你的应用选择了一个特别低的分辨率;在某些时候它没有帮助。但扫描800x600对于QR码应该足够了。
自动对焦与亮度无关。相机驱动程序本身始终自动调整曝光。该应用程序无法控制此情况,也无法控制;您可以做的最好的事情是在Android API的更高版本中修改曝光设置。
答案 2 :(得分:0)
似乎在某些设备上(对我而言,它也发生在Android 3.0设备上:三星Galaxy Tab 10.1),在成功进行自动对焦调用后,自动曝光仍然处于锁定状态。对另一个亮度区域进行另一次聚焦时,自动曝光将再次进行,但在对焦完成后保持锁定状态。尚不确定如何解决这个问题。
答案 3 :(得分:0)
启用isContinuousFocusEnabled。
barcodeScannerView.barcodeView.cameraSettings.isContinuousFocusEnabled = true