public class HandlightActivity extends Activity implements OnClickListener{
private Togglebutton togglebutton;
private Camera m_Camera;
@OverrIDe
protected voID onCreate(Bundle savedInstanceState) {
// Todo auto-generated method stub
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.handlight);
togglebutton = (Togglebutton)this.findVIEwByID(R.ID.togglebutton1);
togglebutton.setonClickListener(this);
getwindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@OverrIDe
public voID onClick(VIEw v) {
Togglebutton tb = (Togglebutton)v;
if(!tb.isChecked()){
PackageManager pm= this.getPackageManager();
FeatureInfo[] features=pm.getSystemAvailableFeatures();
for(FeatureInfo f : features)
{
if(PackageManager.FEATURE_CAMERA_FLASH.equals(f.name)) //判断设备是否支持闪光灯
{
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.startPrevIEw();
togglebutton.setBackgroundcolor(0x30ffffff);
}
}
}else{
if ( m_Camera != null )
{
m_Camera.stopPrevIEw();
m_Camera.release();
m_Camera = null;
}
togglebutton.setBackgroundcolor(0xffffffff);
}
}
}
handlight.xml
@H_301_1@复制代码 代码如下:
<?xml version="1.0" enCoding="utf-8"?>
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"
androID:layout_wIDth="match_parent"
androID:layout_height="match_parent"
androID:orIEntation="vertical" >
<Togglebutton androID:ID="@+ID/togglebutton1"
androID:layout_wIDth="match_parent"
androID:layout_height="match_parent"
androID:checked="true"
androID:text="Togglebutton"/>
</linearLayout>
需要加上权限
<uses-permission androID:name="androID.permission.FLASHliGHT"/>
<uses-permission androID:name="androID.permission.WAKE_LOCK"/>
<uses-permission androID:name="androID.permission.CAMERA"/>
<uses-permission androID:name="androID.harDWare.camera"/>
注意:并不是所有的设备都支持
网上还有一种说法是调用系统隐藏API,不过我试了没反应,可能是系统版本问题,备份一下
用IHarDWareService直接控制
AndroID1.5以前是直接提供这个接口的,之后呢,需要我们自己来做一下。
在你的项目中新建一个包AndroID.os,新建一个IHarDWareService.aIDl文件,内容如下:
@H_301_1@复制代码 代码如下:
package androID.os;
/** {@hIDe} */
interface IHarDWareService
{
// obsolete flashlight support
boolean getFlashlightEnabled();
voID setFlashlightEnabled(boolean on);
}
然后在你的程序中引入
@H_301_1@复制代码 代码如下:
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();
}
}
这样就可以开启闪光灯了。要使用的权限:
@H_301_1@复制代码 代码如下:
<uses-permission androID:name="androID.permission.FLASHliGHT" />
<uses-permission androID:name="androID.permission.HARDWARE_TEST" />
总结
以上是内存溢出为你收集整理的Android 开启闪光灯做手电筒的详解全部内容,希望文章能够帮你解决Android 开启闪光灯做手电筒的详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)