当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 开启闪光灯做手电筒的详解

Android 开启闪光灯做手电筒的详解

2019年07月24日  | 移动技术网移动技术  | 我要评论
复制代码 代码如下:

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
复制代码 代码如下:

<?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文件,内容如下:
复制代码 代码如下:

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" />

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网