android手机用闪光灯做成手电筒的应用非常多,可是有的不能用。

后来发现是除了把 camera device的 flashmode设置成torch外还要打开预览:

以下是代码:

MainActivity.java

package com.android.flashlight;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.ImageView; public class MainActivity extends Activity{ private FlashlightSurface mSurface;
private ImageView mImageView;
private boolean isFlashlightOn = false; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Contants.LogI("MainActivity: onCreate()"); mSurface = (FlashlightSurface) findViewById(R.id.surfaceview);
mImageView = (ImageView) findViewById(R.id.image); } @Override
public boolean onTouchEvent(MotionEvent event) {
if(MotionEvent.ACTION_UP == event.getAction()){
Contants.LogI("MainActivity: onTouchEvent() : ACTION_UP");
if(isFlashlightOn){
mSurface.setFlashlightSwitch(false);
isFlashlightOn = false;
mImageView.setImageResource(R.drawable.flashlight_off);
}else{
mSurface.setFlashlightSwitch(true);
isFlashlightOn = true;
mImageView.setImageResource(R.drawable.flashlight_on);
}
}
return super.onTouchEvent(event);
} }

FlashlightSurface.java

package com.android.flashlight;

import android.content.Context;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView; public class FlashlightSurface extends SurfaceView implements SurfaceHolder.Callback{ private SurfaceHolder mHolder;
private Camera mCameraDevices;
private Camera.Parameters mParameters; public FlashlightSurface(Context context, AttributeSet attrs) {
super(context, attrs);
Contants.LogI("FlashlightSurface");
mHolder = this.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Contants.LogI("surfaceChanged");
mParameters = mCameraDevices.getParameters();
if(mParameters != null)
mParameters.setPictureFormat(PixelFormat.JPEG);
mParameters.setPreviewSize(320, 480);
mParameters.setPictureSize(320, 480);
mCameraDevices.setParameters(mParameters);
mCameraDevices.startPreview(); } @Override
public void surfaceCreated(SurfaceHolder holder) {
Contants.LogI("surfaceCreated");
try {
mCameraDevices = Camera.open();
mCameraDevices.setPreviewDisplay(mHolder);
} catch (Exception e) {
if(mCameraDevices != null)
mCameraDevices.release();
mCameraDevices = null;
}
} @Override
public void surfaceDestroyed(SurfaceHolder holder) {
Contants.LogI("surfaceDestroyed");
if(mCameraDevices == null) return;
mCameraDevices.stopPreview();
mCameraDevices.release();
mCameraDevices = null;
} /**
* 设置手电筒的开关状态
* @param on : true则打开,false则关闭
*/
public void setFlashlightSwitch(boolean on){
if(mCameraDevices == null) return;
if(mParameters == null){
mParameters = mCameraDevices.getParameters();
}
if(on){
mParameters.setFlashMode(Contants.FLASH_MODE_TORCH);
}else{
mParameters.setFlashMode(Contants.FLASH_MODE_OFF);
}
Contants.LogI("setFlashlightSwitch-----------------" + on);
mCameraDevices.setParameters(mParameters);
} }

布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <com.android.flashlight.FlashlightSurface
android:id="@+id/surfaceview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
></com.android.flashlight.FlashlightSurface>
<ImageView
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/flashlight_off"
android:background="#FFFFFFFF"
/> </RelativeLayout>

显然这里打开了一个预览,可是被图片盖上了,看不见而已。不然闪光灯不亮。

这里有个Demo:http://download.csdn.net/detail/liu_zhen_wei/4801779

包含widget窗体小部件的使用方法和手电筒的功能实现,安装后,加入窗体小部件(手电筒)到桌面,然后点击小部件后,打开手电筒的界面

点击界面,实现 打开/关闭 手电筒。

android 手电筒的实现的更多相关文章

  1. android手电筒(摇一摇也可开启手电筒)

    package com.firefly.myflashlight; import android.app.Activity; import android.hardware.Camera; impor ...

  2. Android 手电筒源代码

    近期因为公司须要,做了一个手电筒,事实上手电筒原理非常easy,就是调用照相机的闪光灯,控制闪光灯的开关,就能够实现手电筒的效果, 强调一下,代码中一定要注意在结束的时候对闪光灯进行释放,否则就会导致 ...

  3. android手电筒开发

    最近学习android开发,记录学习过程,分享一写小案例 一. 如下先设置好布局文件 <TextView android:id="@+id/textView1" androi ...

  4. 45个android实例源码

    分享45个android实例源码,很好很强大http://www.apkbus.com/android-20978-1-1.html andriod闹钟源代码http://www.apkbus.com ...

  5. 分享45个android实例源码,很好很强大

    分享45个android实例源码,很好很强大 http://www.apkbus.com/android-20978-1-1.html 分享45个android实例源码,很好很强大http://www ...

  6. 分享45个android实例源码,很好很强大.收藏吧!!!

    andriod闹钟源代码 http://www.apkbus.com/android-20974-1-1.html android源码分享之指南针程序 http://www.apkbus.com/an ...

  7. Android <Android应用开发实战> 资源类型<一>

    1.字符串资源>>1.普通字符串>>2.字符串数组 <resources> <string-array name="planets_array&qu ...

  8. android项目大全,总有你所需的

    注:打开请贴网址.有些直接通过链接打开的不对.  1.相对布局实例 http://kukuqiu.iteye.com/blog/1018396 2.Log图文具体解释(Log.v,Log.d,Log. ...

  9. 45个android实例源码分享

    分享45个android实例源码,很好很强大 http://www.apkbus.com/android-20978-1-1.html andriod闹钟源代码 http://www.apkbus.c ...

随机推荐

  1. RTP封装h264

    网络抽象层单元类型 (NALU): NALU头由一个字节组成,它的语法如下: +---------------+      |0|1|2|3|4|5|6|7|      +-+-+-+-+-+-+-+ ...

  2. RubyWin32Api Win32OLE

    #ruby提供了多种运行外部程序的方法 #1.%x %x不需要使用引号包含. #2. system方法 #3.exec类似system但是会中断当前的代码执行 #system和exec不能捕获执行程序 ...

  3. css3属性及事例

    在看网上别的前端大牛的作品时,总会有新的收获,我想很多人应该都知道box-shadow,但是不知道有没有接触过这个 box-shadow: 2px 2px 4px rgba(0,0,0,0.4)  , ...

  4. 1050 数的计数 c语言实现

    描述 给定一个正整数,求其各位之和. 输入 输入一行,为一个正整数(最多10,000位). 输出 输出各位之和. 样例输入 17 样例输出 8 解析:这题主要是大数计算的问题,因为10000位的数无法 ...

  5. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

  6. Linux基本命令(3)文件备份和压缩命令

    文件备份和压缩命令 在Linux中,常用的文件压缩工具有gzip.bzip2.zip.bzip2是最理想的压缩工具,它提供了最大限度的压缩.zip兼容性好,Windows也支持. 命令 功能 bzip ...

  7. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 _get_select_list_options_selected(self, locator)

    def _get_select_list_options_selected(self, locator): select = self._get_select_list(locator) # TODO ...

  8. C++第一章概述

    1:C++主要是对于C的继承性做的相当的出色,主要扩充在于程序员可以自己定义自己的数据结构,用数据结构去描述日常生活中的事务,而不是C语言中当当仅有的Struct数据类型等等 2: 每一种语言都有自己 ...

  9. 【跟我一起学Python吧】Python解释执行原理

    这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件.运行该程序的时候,就可 ...

  10. 下破解安装Python开发工具WingIDE4.1

    步骤: 1.将系统时间调整到一个月之前,然后执行安装. 可以使用date命令调整系统时间,如:date -s '2012-08-14 10:00:00' 2.安装成功后,打开程序,按照提示信息,申请一 ...