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. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值