关于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);
  }

四、效果图

关闭闪光灯状态(默认)

关于Samsung Galaxy Tab的闪关灯有关问题
闪光灯常亮状态
关于Samsung Galaxy Tab的闪关灯有关问题
闪光灯随对焦闪烁状态
关于Samsung Galaxy Tab的闪关灯有关问题