关于zxing二维码扫描开灯的问题

最近看了一款"我查查”的应用,看它里面的那个扫描界面做的蛮好的,还有一个开灯的效果;于是乎,自己就像尝试着做一个,一开始总是会出问题的,不过功夫不负有心人,最后总算被我搞出来了。
“我查查”效果图:

 

我自己改的效果图:

因为是豌豆荚截的图,所以看不到扫描效果,大家可以下载源码看。
开始正题。一开始的时候,我从新声明了一个Camera对象,然后按照正常的逻辑打开camera.open(),打开LED灯,关灯等等。但是这样会报错的:

出现这样的问题的原因是:系统只有一个Camera对象,我再重新声明一个Camera对象的话,当然会报错,这是我犯错误比较严重的地方,果然还是应该先细读一下Zxing的源码啊!

解决方法:因为Zxing扫描启动的时候已经初始化了一个Camera对象了,所以没有必要再重新声明一个对象。

 

这个初始方法是在CameraManager类里面,大家可以去看下。到了这里问题已经解决一半了,只要我们在CameraManager里面添加一个获取camera对象的方法就行,然后你在CaptureActivity里面调用那个方法来获取已经打开的camara,最后设置一下开灯,关灯一些相关属性就OK了。
开灯、关灯的关键代码,这个百度也能搜到的,记得要添加相关权限:
/**
  * 开灯
  */
private OnClickListener openListener = new OnClickListener() {
  @Override
  public void onClick(View v) {
   camera = CameraManager.getCamera();
   parameter = camera.getParameters();
   // TODO 开灯
   if (isOpen) { 
    btnOpen.setText("关灯");
    parameter.setFlashMode(Parameters.FLASH_MODE_TORCH);
    camera.setParameters(parameter);   
    isOpen = false;
   } else {  // 关灯
    btnOpen.setText("开灯");
    parameter.setFlashMode(Parameters.FLASH_MODE_OFF);
    camera.setParameters(parameter);
    isOpen = true;
   }
  }
};
不过,程序写到这里还并没有结束,运行以后,发现可以开灯了,但是关灯以后还是会报错的。报什么错呢?看下面:

 

 

大家一看应该知道是什么问题了,不知道的话百度一下吧:http://www.eoeandroid.com/thread-113332-1-1.html可以去看看这里。
人家给的解决方案是:
public void surfaceDestroyed(SurfaceHolder holder) {
                camera.setPreviewCallback(null) ;
                camera.stopPreview();
                camera.release();
                camera = null;
        }
我试了,可以关灯了,但是退出应用的时候还是报错了,我想是不是在OnDestory()里面也加上这句话,结果运行还是不行。最后想了一想,我调用的不是CameraManager里面的初始化方法吗?然后再回过头来看这个类,发现里面已经写好了桌面销毁Camera对象的方法了:
/**
  * Tells the camera to stop drawing preview frames.
  */
public static void stopPreview() {
  if (camera != null && previewing) {
   if (!useOneShotPreviewCallback) {
    camera.setPreviewCallback(null);
   }
   camera.stopPreview();
   previewCallback.setHandler(null, 0);
   autoFocusCallback.setHandler(null, 0);
   previewing = false;
  }
}
于是乎,我就在surfaceDestroyed里面调用了这个stopPreView()这个方法,运行之后果断不报错了。到这里为止,给二维码扫描加开灯的功能就真的大功告成了。目前测试还没有发现扫描问题,如果以后大家发现了问题,希望能一起探讨。
最后给大家分享一些关于Zxing二维码扫描的资源,个人觉得写的真不错,里面还有一些延伸的知识,楼主真的很细心啊!
地址:http://www.cnblogs.com/liuan/archive/2012/01/05/2312714.html,希望能给大家有帮助。
不好意思,打个广告,欢迎加入技术交流群6668958,游戏、应用等。

源码下载:http://download.csdn.net/detail/chengxueji5368/5098020

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值