Android之扫描二维码&开启闪光灯
来源:互联网 发布:java gbk编码转utf 8 编辑:程序博客网 时间:2024/06/05 08:19
在本人开发的Android项目中先加入了扫描二维码功能(google的zxing)
然后又有需求要在扫描二维码的同时,可以打开闪光灯……
如此一个身心健康的年轻程序员慢慢的走向了死亡…………开个玩笑
上篇文章就是先写了个开启闪光灯的操作
不过当集成到项目中的时候就Game Over了
不过不着急,程序员是干嘛的?不就是挑战错误嘛
先看看错误信息
08-06 17:34:29.257: E/AndroidRuntime(24294): FATAL EXCEPTION: main08-06 17:34:29.257: E/AndroidRuntime(24294): java.lang.IllegalStateException: Could not execute method of the activity08-06 17:34:29.257: E/AndroidRuntime(24294): at android.view.View$1.onClick(View.java:2154)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.view.View.performClick(View.java:2538)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.view.View$PerformClick.run(View.java:9152)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.os.Handler.handleCallback(Handler.java:587)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.os.Handler.dispatchMessage(Handler.java:92)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.os.Looper.loop(Looper.java:130)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.app.ActivityThread.main(ActivityThread.java:3691)08-06 17:34:29.257: E/AndroidRuntime(24294): at java.lang.reflect.Method.invokeNative(Native Method)08-06 17:34:29.257: E/AndroidRuntime(24294): at java.lang.reflect.Method.invoke(Method.java:507)08-06 17:34:29.257: E/AndroidRuntime(24294): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)08-06 17:34:29.257: E/AndroidRuntime(24294): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)08-06 17:34:29.257: E/AndroidRuntime(24294): at dalvik.system.NativeStart.main(Native Method)08-06 17:34:29.257: E/AndroidRuntime(24294): Caused by: java.lang.reflect.InvocationTargetException08-06 17:34:29.257: E/AndroidRuntime(24294): at java.lang.reflect.Method.invokeNative(Native Method)08-06 17:34:29.257: E/AndroidRuntime(24294): at java.lang.reflect.Method.invoke(Method.java:507)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.view.View$1.onClick(View.java:2149)08-06 17:34:29.257: E/AndroidRuntime(24294): ... 11 more08-06 17:34:29.257: E/AndroidRuntime(24294): Caused by: java.lang.RuntimeException: Fail to connect to camera service08-06 17:34:29.257: E/AndroidRuntime(24294): at android.hardware.Camera.native_setup(Native Method)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.hardware.Camera.<init>(Camera.java:300)08-06 17:34:29.257: E/AndroidRuntime(24294): at android.hardware.Camera.open(Camera.java:275)08-06 17:34:29.257: E/AndroidRuntime(24294): at com.android.francis.application.MainActivity.mainHandler(MainActivity.java:69)08-06 17:34:29.257: E/AndroidRuntime(24294): ... 14 more
通过提示信息,结合实际现象,进行分析,不难了解到错误的原因:
扫描二维码已经开启了相机操作,然后开启闪光灯又实例化了一个Camera对象
手机只有一个Camera,所以我们自己就不能通过Camera camera = Camera.open();方法获得Camera对象了。
查看zxing程序代码,有一个CameraManagement类,Camera的实例化与操作都在这个Management类中,所以在该类中提供获取Camera对象的方法:
public Camera getCamera() {return camera;}
然后再看扫描二维码的Activity中的方法:
private Camera camera;private void turnHandler() {if (camera == null) {//camera = Camera.open();camera = CameraManager.get().getCamera();}camera.startPreview();Parameters parameters = camera.getParameters();//判断闪光灯当前状态if (Parameters.FLASH_MODE_OFF.equals(parameters.getFlashMode())) {turnOn(parameters);} else if (Parameters.FLASH_MODE_TORCH.equals(parameters.getFlashMode())) {turnOff(parameters);}}private void turnOn(Parameters parameters) {parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);camera.setParameters(parameters);turnOnOff.setText("关闭闪光灯");}private void turnOff(Parameters parameters) {parameters.setFlashMode(Parameters.FLASH_MODE_OFF);camera.setParameters(parameters);//camera.release();//camera = null;turnOnOff.setText("开启闪光灯");}
如此,开启闪光灯的操作是成功了,不过关闭闪光灯的操作还是有问题……
我们需要修改surfaceDestroyed()方法:
public void surfaceDestroyed(SurfaceHolder holder) {hasSurface = false;CameraManager.get().stopPreview();}
如此,在二维码扫描Activity中添加开启/关闭闪光灯操作就完成了
该方法在eoe上已经与作者给出详细介绍了
http://www.eoeandroid.com/thread-235785-1-1.html
- Android之扫描二维码&开启闪光灯
- Android二维码扫描+开闪光灯
- 【Android 学习】之二维码扫描开发(闪光灯功能)
- Android之开启闪光灯
- swift 扫描二维码/条形码,开启闪光灯,识别相册二维码
- 二维码实现开启闪光灯
- Android实现二维码扫描功能(三)-闪光灯控制
- android 开启闪光灯
- android开启闪光灯
- 二维码扫描时闪光灯用按钮控制
- ZXing扫描二维码 打开和关闭,闪光灯
- Android开发之二维码扫描
- Android之条码扫描二维码扫描
- Android之条码扫描二维码扫描
- Android 二维码扫描与生成 可选颜色 logo 控制闪光灯使用Demo
- Android 实现闪光灯开关和在之前扫描二维码包中使用方法
- Android 开启闪光灯做手电筒
- android 开启闪光灯小应用
- 不错的在线api 网站
- java中静态代码块的用法 static用法详解
- android判断网络连接
- 解释nginx的epoll的网络I/O模型为什么快的原因
- 字符串面试题系列之三:左旋转字符串
- Android之扫描二维码&开启闪光灯
- 《我的第一本c++书》学习笔记:STL中的一些通用算法(一)
- jquery学习(一)
- Micaps3.2二次开发实例教程-6
- 打印Java环境参数
- GNU bash实现机制与源代码简析
- 计划指南
- HMM学习笔记_1(从一个实例中学习DTW算法)
- Erlang ODBC 处理中文