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

Android 开启闪光灯做手电筒的详解,第1张

概述复制代码代码如下:publicclassHandLightActivityextendsActivityimplementsOnClickListener{privateToggleButtontoggleButton;privateCameram_Camera;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//T @H_301_1@复制代码 代码如下:
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 开启闪光灯做手电筒的详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1142525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存