关于Samsung Galaxy Tab的闪关灯有关问题
关于Samsung Galaxy Tab的闪关灯问题

闪光灯常亮状态


一、问题
有客户的需求,项目的开发才不会循规蹈矩,才会遇到各种各样的问题。不过今天遇到的问题,确实让人摸不到头脑。
项目需要扫描条码,于是使用了条码扫描二维码扫描——ZXing android 源码简化中所使用的ZXing,项目进行的很顺利,能够正常的扫描条码,同时能够获得条码相应的信息。由于项目使用环境的原因,客户提出要求要在打开摄像头进行条码扫描的时候同时打开闪光灯,同时要将闪光灯保持常亮状态,而不是在对焦的时候闪烁。这个问题也好解决,编写好代码之后在联想乐Pad
K1 WLAN 16GB能够正常运行,打开摄像头之后能够保持闪光灯的常亮。但是,问题出现了,这段代码在运行到三星GALAXY Tab P7510的时候闪光灯硬是没有反应,同样的代码,出现这样的问题,是在是让人费解。
在stackoverflow上看到了很多人都遇到了这样的问题,比较典型的是How to use camera flash/led as torch on a Samsung Galaxy Tab?得知这是设备的差异性问题造成的。但是出现这样的问题,我们也不能告诉客户,因为设备差异性原因我们的代码无法在指定的三星GALAXY
Tab P7510运行。于是找答案。
二、解决方案
我们安装了我查查这个比较流行的条码扫面软件,发现它可以在打开摄像头时同时保持闪光灯的常量,但是其不是一打开摄像头就让闪光灯亮的,是让用户选择是否打开闪关灯,于是乎答案出来了。我们采用同样的解决方案,在打开摄像头之后,让用户选中是否打开闪光灯,这样就可以设置闪光灯的状态,同时可以让其在三星GALAXY
Tab P7510上正常运行。
三、代码
在条码扫描二维码扫描——ZXing android 源码简化的基础之上改造,main.xml文件如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/preview_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" android:layout_gravity="center" /> <com.zijunlin.Zxing.Demo.view.ViewfinderView android:id="@+id/viewfinder_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/transparent" /> <TextView android:id="@+id/txtResult" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" /> <Button android:id="@+id/magic" android:layout_gravity="right|center_vertical" android:background="@drawable/ic_flash_off" android:layout_width="55dp" android:layout_height="55dp" android:onClick="click" /> </FrameLayout>CaptureActivity.java添加代码如下:
int i = 0; /** * 根据用户的选择,设定闪光灯的状态 * @param v */ public void click(View v) { switch (i % 3) { case 0: CameraManager.get().setFlashOn("torch"); magic.setBackgroundResource(R.drawable.ic_flash_troch); break; case 1: CameraManager.get().setFlashOn("on"); magic.setBackgroundResource(R.drawable.ic_flash_on); break; case 2: CameraManager.get().setFlashOn("off"); magic.setBackgroundResource(R.drawable.ic_flash_off); break; } i++; }CameraManager添加代码如下:
public void setFlashOn(String type){ Camera.Parameters param = camera.getParameters(); param.setFlashMode(type); camera.setParameters(param); }
四、效果图
关闭闪光灯状态(默认)闪光灯常亮状态
闪光灯随对焦闪烁状态