1. 程式人生 > >Android開啟閃光燈的幾種辦法

Android開啟閃光燈的幾種辦法

一、控制硬體的情節

早在2008年開發Symbian和WM程式的時候,就非常好奇如何用我們的程式碼來控制硬體裝置,比如閃光燈就是一個很好的控制物件。我們開發程式,很多樂趣就在於控制。這是一種精神上的愉悅,無論在哪個領域,控制其他事物都是很吸引人的。那麼轉眼間到了2012年,Android開發也做了幾年了,控制它的硬體卻一直沒有時間做,真是慚愧。今天得空,學習了一下,控制閃光燈大致有兩種辦法。下面就一一道來。

二、用IHardwareService直接控制

Android1.5以前是直接提供這個介面的,之後呢,需要我們自己來做一下。

在你的專案中新建一個包android.os,新建一個IHardwareService.aidl檔案,內容如下:

package android.os;/** {@hide} */interface IHardwareService{    // obsolete flashlight support    boolean getFlashlightEnabled();    void setFlashlightEnabled(boolean on);}
然後在你的程式中引入
import android.os.IHardwareService; /**  * 設定閃光燈的開啟和關閉  * @param isEnable  * @author linc  * @date 2012-3-18  */ private void
setFlashlightEnabled(boolean isEnable) 
{  try  {   Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);   IBinder binder = (IBinder) method.invoke(null, new Object[] { "hardware" });      IHardwareService localhardwareservice = IHardwareService.Stub.asInterface(binder);   localhardwareservice.setFlashlightEnabled(isEnable);  }  catch
(Exception e)  {   e.printStackTrace();  }   }
這樣就可以開啟閃光燈了。要使用的許可權:
 <uses-permission android:name="android.permission.FLASHLIGHT" />   <uses-permission android:name="android.permission.HARDWARE_TEST" />  

三、用照相機來控制閃光燈

這是思維的另一個方向。Camera自帶豐富的介面與Parameters,我們只管拿來使用就好了。

    private Camera camera = null;    private Parameters parameters = null;//直接開啟camera = Camera.open();     parameters = camera.getParameters();    parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);//開啟    camera.setParameters(parameters);//直接關閉parameters.setFlashMode(Parameters.FLASH_MODE_OFF);//關閉    camera.setParameters(parameters);    camera.release();
如果這樣遇到問題的話,可以嘗試用camera的preview方法:
    private void OpenLightOn()    {     if ( null == m_Camera )     {      m_Camera = Camera.open();         }          Camera.Parameters parameters = m_Camera.getParameters();                  parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);          m_Camera.setParameters( parameters );                m_Camera.autoFocus( new Camera.AutoFocusCallback (){          public void onAutoFocus(boolean success, Camera camera) {               }                        });      m_Camera.startPreview();        }        private void CloseLightOff()   {     if ( m_Camera != null )     {      m_Camera.stopPreview();      m_Camera.release();      m_Camera = null;     }         }
四、結束

測試的時候注意啦,一定要用有閃光燈的手機來測哦,我用三星i9001測試,怎麼測都不行,後來才發現人家根本就沒有閃光燈,浪費了好多時間,^_^。

上面的程式參考了網上的例子,如果侵犯了您的權利,請通知我。

轉載請註明,謝謝。