Android開啟閃光燈的幾種辦法


來源:Linux社區  作者:lincyang

一、控制硬件的情節

早在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;  
        }         
    }  

 

四、結束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM