在 zxing 二维码扫描界面添加闪光灯开关 在上一篇博客中笔者提到,当初为了能够在仓库中偷懒才引出了那么多的问题,现在仓库管理程序写好了,笔者兴冲冲地到仓库里统计物料,但是又发现了一个新的问题,那就是因为公司实在是太节(kōu)约(mén)了,仓库里面就几盏灯,其他地方都是一片漆黑,这为扫描二维码带来了很大的难度。最好的解决方法莫过于在扫描界面添加闪光灯开关,于是下班后笔者回到寝室对代码进行了修改。



在上一篇博客中笔者提到,当初为了能够在仓库中偷懒才引出了那么多的问题,现在仓库管理程序写好了,笔者兴冲冲地到仓库里统计物料,但是又发现了一个新的问题,那就是因为公司实在是太节(kōu)约(mén)了,仓库里面就几盏灯,其他地方都是一片漆黑,这为扫描二维码带来了很大的难度。最好的解决方法莫过于在扫描界面添加闪光灯开关,于是下班后笔者回到寝室对代码进行了修改。

但是在添加好闪光灯开关后,打开闪光灯时程序华丽的崩溃了,这让笔者百思不得其解。我们都知道,在安卓中只能够获取到一个 Camera 对象,通过在网上查找资料,笔者终于得知,原来在 zxing 项目中的 camera 包下的 CameraManager.java 代码中已经获取了 Camera 对象,所以我们只需要在这个类中添加一个静态方法获取这个对象即可,于是我在 CameraManager 添加了这么几句代码:



[java]  view plain  copy
  1. public static Camera getCamera()  
  2. {  
  3.     return camera;  
  4. }  
接下来要做的事情就是在扫描界面的布局文件中添加按钮标签,如果看了笔者上一篇博客的朋友应该还记得,我们在启动扫描界面的时候是启动的一个名叫 CaptureActivity 的活动,通过下图中红色框框住的代码可知,该活动的布局文件是 capture.xml,我们到项目中的 res->layout 文件夹下打开它。

笔者在最后面添加了一个相对布局,并且将它放在了屏幕最底端,然后通过调整布局的高度将布局中的图片按钮放在了合适的位置。

接下来的步骤大家应该就非常熟悉了,在 CaptureActivity 活动中用 findViewById() 方法获取图片按钮的实例,并且在该按钮的监听器里面实现闪光灯的快关。Mars 老师曾经在安卓教学视频中说过,作为一个程序员,如果能够动手写代码就尽量别 BB,虽然笔者还不是一个合格的程序员,但一直都是以优秀的程序员的标准来要求自己的(这话怎么这么熟悉呢?)。所以,上代码:

[java]  view plain  copy
  1. public final class CaptureActivity extends Activity implements SurfaceHolder.Callback   
  2. {  
  3.     private ImageButton imageButton_flashlight;  
  4.     private boolean isOpen = false;  
  5.                            .  
  6.                            .  
  7.                            .  
  8.     <span style="white-space:pre;"> </span>@Override  
  9.     public void onCreate(Bundle icicle)   
  10.         {  
  11.                            .  
  12.                            .  
  13.                            .  
  14.             imageButton_flashlight = (ImageButton) findViewById(R.id.capture_imageview_flashlight);  
  15.         imageButton_flashlight.setOnClickListener(new View.OnClickListener()   
  16.         {  
  17.             @Override  
  18.             public void onClick(View v)   
  19.             {  
  20.                 if(!isOpen)  
  21.                 {  
  22.                     openLight();  
  23.                 }  
  24.                 else  
  25.                 {  
  26.                     closeLight();  
  27.                 }  
  28.             }  
  29.         });  
  30.     }  
  31.       
  32.     private void openLight() //开闪光灯  
  33.     {  
  34.         camera = CameraManager.getCamera(); //我们先前在CameraManager类中添加的静态方法  
  35.             params = camera.getParameters();  
  36.             params.setFlashMode(Parameters.FLASH_MODE_TORCH);  
  37.             camera.setParameters(params);  
  38.             camera.startPreview();   
  39.             isOpen = true;  
  40.     }  
  41.       
  42.     private void closeLight() //关闪光灯  
  43.     {  
  44.         params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);  
  45.         camera.setParameters(params);   
  46.             isOpen = false;  
  47.     }  

好了,整个过程就是这样的,最后上一下效果图:

开闪光灯

关闭闪光灯:


猜你喜欢

转载自blog.csdn.net/jun_tong/article/details/80425487