Android開啟閃光燈的幾種辦法
阿新 • • 發佈:2018-12-19
一、控制硬體的情節
早在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測試,怎麼測都不行,後來才發現人家根本就沒有閃光燈,浪費了好多時間,^_^。
上面的程式參考了網上的例子,如果侵犯了您的權利,請通知我。
轉載請註明,謝謝。