`
dowhathowtodo
  • 浏览: 777618 次
文章分类
社区版块
存档分类
最新评论

Android开启闪光灯的几种办法

 
阅读更多

一、控制硬件的情节

早在2008年开发Symbian和WM程序的时候,就非常好奇如何用我们的代码来控制硬件设备,比如闪光灯就是一个很好的控制对象。我们开发程序,很多乐趣就在于控制。这是一种精神上的愉悦,无论在哪个领域,控制其他事物都是很吸引人的。那么转眼间到了2012年,Android开发也做了几年了,控制它的硬件却一直没有时间做,真是惭愧。今天得空,学习了一下,控制闪光灯大致有两种办法。下面就一一道来。

二、用IHardwareService直接控制

Android1.5以前是直接提供这个接口的,之后呢,需要我们自己来做一下。

在你的项目中新建一个包Android.os,新建一个IHardwareService.aidl文件,内容如下:

  1. packageAndroid.os;
  2. /**{@hide}*/
  3. interfaceIHardwareService
  4. {
  5. //obsoleteflashlightsupport
  6. booleangetFlashlightEnabled();
  7. voidsetFlashlightEnabled(booleanon);
  8. }

然后在你的程序中引入

  1. importAndroid.os.IHardwareService;
  2. /**
  3. *设置闪光灯的开启和关闭
  4. *@paramisEnable
  5. *@authorlinc
  6. *@date2012-3-18
  7. */
  8. privatevoidsetFlashlightEnabled(booleanisEnable)
  9. {
  10. try
  11. {
  12. Methodmethod=Class.forName("Android.os.ServiceManager").getMethod("getService",String.class);
  13. IBinderbinder=(IBinder)method.invoke(null,newObject[]{"hardware"});
  14. IHardwareServicelocalhardwareservice=IHardwareService.Stub.asInterface(binder);
  15. localhardwareservice.setFlashlightEnabled(isEnable);
  16. }
  17. catch(Exceptione)
  18. {
  19. e.printStackTrace();
  20. }
  21. }

这样就可以开启闪光灯了。要使用的权限:

  1. <uses-permissionAndroid:name="android.permission.FLASHLIGHT"/>
  2. <uses-permissionAndroid:name="android.permission.HARDWARE_TEST"/>
  3. 三、用照相机来控制闪光灯

    这是思维的另一个方向。Camera自带丰富的接口与Parameters,我们只管拿来使用就好了。

    1. privateCameracamera=null;
    2. privateParametersparameters=null;
    3. //直接开启
    4. camera=Camera.open();
    5. parameters=camera.getParameters();
    6. parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);//开启
    7. camera.setParameters(parameters);
    8. //直接关闭
    9. parameters.setFlashMode(Parameters.FLASH_MODE_OFF);//关闭
    10. camera.setParameters(parameters);
    11. camera.release();

    如果这样遇到问题的话,可以尝试用camera的preview方法:

    1. privatevoidOpenLightOn(){
    2. if(null==m_Camera)
    3. {
    4. m_Camera=Camera.open();
    5. }
    6. Camera.Parametersparameters=m_Camera.getParameters();
    7. parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    8. m_Camera.setParameters(parameters);
    9. m_Camera.autoFocus(newCamera.AutoFocusCallback(){
    10. publicvoidonAutoFocus(booleansuccess,Cameracamera){
    11. }
    12. });
    13. m_Camera.startPreview();
    14. }
    15. privatevoidCloseLightOff(){
    16. if(m_Camera!=null)
    17. {
    18. m_Camera.stopPreview();
    19. m_Camera.release();
    20. m_Camera=null;
    21. }
    22. }

分享到:
评论
1 楼 Anloney 2014-11-19  

  楼主,用第二种方法闪光灯只能亮不能闪烁是怎么回事啊,可不可以设置让闪光灯闪烁呢,

我配置文件都加了。

<!-- 打开闪光灯权限 -->
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera.flash" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.autofocus" />

相关推荐

Global site tag (gtag.js) - Google Analytics