您的位置:首页 > 移动开发 > Android开发

Android开启闪光灯的几种办法

2012-03-21 16:36 387 查看
1、用IHardwareService直接控制

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

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

[java]
view plaincopy

<span style="font-size:18px;">package android.os;

/** {@hide} */
interface IHardwareService
{
// obsolete flashlight support
boolean getFlashlightEnabled();
void setFlashlightEnabled(boolean on);
}</span>

然后在你的程序中引入

[java]
view plaincopy

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();
}

}

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

[html]
view plaincopy

<span style="font-size:18px;"> <uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.HARDWARE_TEST" /> </span>

2、用照相机来控制闪光灯

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

[java]
view plaincopy

<span style="font-size:18px;"> 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();</span>

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

[java]
view plaincopy

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: