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

复制代码 代码如下:

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

时间: 2024-10-03 04:19:02

Android 开启闪光灯做手电筒的详解的相关文章

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

复制代码 代码如下: public class HandLightActivity extends Activity implements OnClickListener{private ToggleButton toggleButton;private Camera m_Camera;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCre

Android Bluetooth蓝牙技术使用流程详解_Android

在上篇文章给大家介绍了Android Bluetooth蓝牙技术初体验相关内容,感兴趣的朋友可以点击了解详情. 一:蓝牙设备之间的通信主要包括了四个步骤 设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的数据传输 二:具体编程实现 1. 启动蓝牙功能 首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了.例如: BluetoothAdapter mBluetoothAdapter = Blueto

《Android 网络开发与应用实战详解》——2.3节Android系统架构

2.3 Android系统架构 Android 网络开发与应用实战详解 在本节内容中,将进一步分解Android应用程序,详细剖析Android应用程序的核心构成部分,为读者学习本书后面知识打下基础. 2.3.1 Android体系结构介绍 Android作为一个移动设备的平台,其软件层次结构包括操作系统(OS).中间件(MiddleWare)和应用程序(Application).根据Android的软件框图,其软件层次结构自下而上分为以下4层. (1)操作系统层(OS). (2)各种库(Lib

数据-java中android中onTouchEvent方法的问题详解,谢谢解答!

问题描述 java中android中onTouchEvent方法的问题详解,谢谢解答! public boolean onTouchEvent(MotionEvent event) { //调用warp方法根据触摸屏事件的座标点来扭曲verts数组 warp(event.getX(), event.getY()); return true; } //MotionEvent event这两个哪个是数据类型,哪个是数值 //event.getX(), event.getY() 返回的是什么值是什么数

Android 网络请求框架Volley实例详解

Android 网络请求框架Volley实例详解 首先上效果图 Logcat日志信息on Reponse Volley特别适合数据量不大但是通信频繁的场景,像文件上传下载不适合! 首先第一步 用到的RequetQueue RequestQueue.Java RequestQueue请求队列首先得先说一下,ReuqestQueue是如何对请求进行管理的...RequestQueue是对所有的请求进行保存...然后通过自身的start()方法开启一个CacheDispatcher线程用于缓存调度,开

Android Doze模式启用和恢复详解

从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,Doze模式通过延缓app后台的CPU和网络活动减少电量的消耗.App Stanbdy延缓用户最近没有使用app的后台网络活动. 作为移动开发人员,我们开发的App需要有推送功能,不希望在锁屏或者不充电的时候被Doze模式干掉.那么如何检测手机进入Doze模式之后App的状态呢? 一.模拟未充电状态

Android Bluetooth蓝牙技术使用流程详解

在上篇文章给大家介绍了Android Bluetooth蓝牙技术初体验相关内容,感兴趣的朋友可以点击了解详情. 一:蓝牙设备之间的通信主要包括了四个步骤 设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的数据传输 二:具体编程实现 1. 启动蓝牙功能 首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了.例如: BluetoothAdapter mBluetoothAdapter = Blueto

Android 中RxPermissions 的使用方法详解

Android 中RxPermissions 的使用方法详解 以请求拍照.读取位置权限为例 module的build.gradle: compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar' compile 'io.reactivex.rxjava2:rxjava:2.0.5' AndroidManifest.xml: <uses-permission android:name="android.permission.AC

Android ListView之EfficientAdapte的使用详解

Android ListView之EfficientAdapte的使用详解 在做Android手机应用开发时, ListView是一个非常常用的控件.如何更新的使用它呢?其实SDK中的例子已经非常的完整了,并且能满足大多数的需要. 如果大家刚开始学习ListView,我建议大家还是直接先看官方的例子好了,这样大家会学到更好的写法以及养成更好的习惯. 下面就以EfficientAdapter为例,看看官网例子是如何使用ListView的: 请大家格外注意getView的书写方法,大家可能从网上也能