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. 鼠标悬停css3动画效果

    下载Demo 效果预览 html: <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  2. 利用ioctl()获取无线速率

    其实对于自己装了网卡驱动的来说,应该从最根本的驱动中获取速率. 但是用ioctl()也可以,其实实现和iwconfig命令相同. 仅仅获取速率这部分: #include <stdio.h> ...

  3. [转] arcgis Engine创建shp图层

    小生 原文 arcgis Engine创建shp图层 以创建点图层为例.首先要得到保存文件的地址. SaveFileDialog saveFileDialog = new SaveFileDialog ...

  4. JMeter使用jar进行压力测试

    最近需要对改造的redis缓存接口做压力测试,使用了开源压力测试工具JMeter,分享一下自己的使用经验,希望能对需要进行压力测试的开发同学有所帮助. JMeter介绍 JMeter是Apache软件 ...

  5. LeetCode题解——Palindrome Number

    题目: 判断一个数字是不是回文数字,即最高位与最低位相同,次高位与次低位相同,... 解法: 求出数字的位数,然后依次求商和求余判断是否相等. 代码: class Solution { public: ...

  6. 一个使用微软Azure blob实现文件下载功能的实例-附带源文件

    Running the sample Please follow the steps below. Step 1: Open the CSAzureServeFilesFromBlobStorage. ...

  7. Python的列表排序

    Python的列表排序 本文为转载,源地址为:http://blog.csdn.net/horin153/article/details/7076321 在 Python 中, 当需要对一个 list ...

  8. linux 下的进程管理工具 supervisor

    在linux下监控进程: 1)yum install python-setuptools   linux下的python安装工具 2)easy_install supervisor     安装sup ...

  9. GCC4.8对new和delete的参数匹配新要求

    一段通信协议的代码,早年在GCC 4.4.VS2013下编译都挺好的,移植到GCC 4.8 ,为C++ 11做准备,在编译的时候发现问题 源代码省略后的版本如下: class Zerg_App_Fra ...

  10. mac 添加安卓设备的支持

    1. 把android设备插到mac电脑上 2. 首先可以看一下之前在该mac电脑上有没有添加过这个 , 命令 : adb devices      如果显示出,下面字样,说明之前添加过了,下面就可以 ...