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. TransparentBlt、StretchBlt与BitBlt三个函数的区别

    jackyhwei 发布于 2011-10-13 10:55 点击:1080次  来自:blog.csdn.net/weiqubo BOOL StretchBlt( int x, //指定目的矩形区域 ...

  2. mkswap 把一个分区格式化成为swap交换区

    mkswap /dev/sda* //创建此分区为swap 交换分区swapon /dev/sda* //加载交换分区swapoff /dev/sda* //关闭交换分区: 若想要开机自动挂载:vi ...

  3. VS2010开发2dx无法解析的外部符号解决记录

    首先新建HelloWorld项目... 想使用Cocos2d扩展包需要引入相关头文件,如:#include “cocos-ext.h”...接下来我们右键工程属性->配置属性->c/c++ ...

  4. 强制将IE8设置为IE7兼容模式来解析网页

    强制将IE8设置为IE7兼容模式来解析网页 英文原文:http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx 文件兼容性用于定义让IE ...

  5. IIS应用程序池回收图文详解

    转:http://blog.sina.com.cn/s/blog_8677fcaa010138uf.html 什么是应用程序池呢?这是微软的一个全新概念:应用程序池是将一个或多个应用程序链接到一个或多 ...

  6. 如何合并IP网段

    1. 安装IPy pip3 install IPy 2. 写脚本: yuyue@workplace:~ $ cat combine_ip.pyfrom IPy import IPSet, IPimpo ...

  7. PIG的配置

    Pig是一个客户端应用程序,就算你要在Hadoop集群上运行Pig,也不需要在集群上装额外的东西.Pig的配置非常简单: 1.下载pig,网址http://pig.apache.org/ 2.在机器上 ...

  8. WebView介绍

    本文主要对WebView进行介绍,包括webView 4个可以定制的点.设置WebView back键响应.控制网页的链接仍在webView中跳转.显示页面加载进度.处理https请求.利用addJa ...

  9. .net获取当前网址url(各种参数值)

    .net获取当前网址url(各种参数值) 假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=1&name=category" 先来看一下整 ...

  10. Android-day02_广播

    1.什么是广播 貌似一个人大声喊一句话,别人听到了这就是广播 2.在android中广播有标准广播和有序广播 标准广播也就是发送一个广播,所有人都能同一时间接收到 有序广播则是有顺序的广播,发送的时候 ...