最近刚开始学习Android应用开发,最近突然想写一个简洁的手电筒程序自用,通过网上的示例让我很轻松的写出了一个简单的小程序,只有简单的开关闪光灯的功能,通过Camera控制的闪光灯,相信大家都可以很容易的在网上看到相关代码,这里就不进行赘述了。如果你碰到了在4.4的手机上无法开启闪光灯的问题,那这篇文章或许可以帮助你。如果不会通过Camera控制的闪光灯,可以去下面链接看一下这里
我把程序部署到我4.4的手机上时,发现无法打开闪光灯,检查了程序后,没有发现错误。于是换了一台4.2的手机,可以正常使用开关闪光灯的功能。试图在网上找寻答案,结果没有成功。于是我就去看Google文档。
在Camera类下,我看到了一条有用的信息:
Important: Pass a fully initialized SurfaceHolder to
setPreviewDisplay(SurfaceHolder). Without a surface, the camera will be unable
to start the preview.
网上提供的方法中没有进行设置SurfaceHolder,会不会是这个原因呢?
于是我在布局文件中加入了一个SurfaceView
1 <SurfaceView 2 android:id="@+id/test" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content"/>
在代码中的相关位置加入相关代码
ViewGroup.LayoutParams localLayoutParams = surfaceview.getLayoutParams(); localLayoutParams.width = 1; localLayoutParams.height = 1; surfaceview.setLayoutParams(localLayoutParams); surfaceview.setZOrderOnTop(true); surfaceview.setBackgroundColor(-2); holder = surfaceview.getHolder(); holder.addCallback(this); holder.setFormat(-2);
try { mCamera.setPreviewDisplay(this.holder); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
重新部署后,发现成功开启了闪光灯。顺利解决了这个小问题。