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. h264检测是I帧还是P帧,解决录像第一帧有马赛克问题

    最近使用h264码流数据进行录像,但是录出来的第一帧有马赛克,究其原因是录像的第一帧不是关键帧,所以需要录像是需要判断第一帧是否是关键帧,方法有两种,第一种是原码流的基础上查找,第二种是将原码流传递给 ...

  2. 构建属于自己的ORM框架之二--IQueryable的奥秘

    上篇文章标题乱起,被吐槽了,这次学乖了. 上篇文章中介绍了如何解析Expression生成对应的SQL语句,以及IQueryable的一些概念,以及我们所搭建的框架的思想等.但还没把它们结合并应用起来 ...

  3. 六款最佳Linux教育应用

    导读 对教育行业的用户来说,有好几款专门的Linux发行版是专门面向教育行业的.本文将介绍适合教育领域的几款顶级发行版. 1.Edubuntu 位居榜首的是Edubuntu.顾名思义,Edubuntu ...

  4. Android入门:发送HTTP的GET和POST请求

    HTTP的请求详解在我的博客中已经讲解过: http://blog.csdn.net/xiazdong/article/details/7215296 我在http://blog.csdn.net/x ...

  5. C# Adding Hyperlink to Windows Form z

    When creating a Windows form in C#, we would like to create a hyperlink so that when the user click ...

  6. Face++接口封装

    本节使用doCurlGetRequest函数来封装Face++的接口请求.我们在class文件夹下的faceStub.php文件中实现 一个faceStub类,封装请求Face++的相关接口. 实现代 ...

  7. Socket异步发送的同步控制

    在网络通信中,我们使用Socket异步发送数据,但在客户端,往往是需要等待服务器的返回结果后(握手过程)再往下执行,这就涉及到同步控制了,在多次的实现中,使用AutoResetEvent,实现不,即有 ...

  8. mysql操作时遇到的小问题

    mysql数据库在程序中执行sql语句时,或者在执行sql时,数据库表可能会有一些特殊的字符,比如说#,.等,这样在执行时 可能会遇到问题 如以下的表名,backup_2014.2.22, 这个表在查 ...

  9. ACCESS TOKEN

    Access Token 在微信公众平台接口开发中,Access Token占据了一个很重要的地位,相当于进入各种接口的钥匙,拿到这个钥匙才有调用其他各种特殊接口的权限. access_token是公 ...

  10. Android JNI之C/C++层调用JAVA

    转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930032.html 从C/C++层调用JAVA层代码步骤: 1. 在JAVA类中创建java方法和本地方法 ...