看到很多刚学习的同志都很纠结按照网上很多代码的实现方法都打开不了闪光灯,确实刚开始也有同感滴啦!希望能给你们一些思路!

废话不多说先上几张图片(有图有真像哦!!!!!!!)

思路:开启闪光灯的方法

我是这样做的

package com.cai.helloworld;

import java.io.IOException;

import android.content.Context;

import android.hardware.Camera;

import android.util.Log;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

public class CameraPreview extends SurfaceView implements

SurfaceHolder.Callback {

private Camera mCamera;

private SurfaceHolder mHolder;

public static final String TAG = "CameraPreview";

public CameraPreview(Context context) {

super(context);

}

@SuppressWarnings("deprecation")

public CameraPreview(Context context, Camera camera) {

super(context);

mCamera = camera;

mHolder = getHolder();

mHolder.addCallback(this);

// deprecated setting, but required on Android versions prior to 3.0

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

// The Surface has been created, now tell the camera where to draw the

// preview.

try {

mCamera.setPreviewDisplay(holder);

mCamera.startPreview();

} catch (IOException e) {

Log.d(TAG, "Error setting camera preview: " + e.getMessage());

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// If your preview can change or rotate, take care of those events here.

// Make sure to stop the preview before resizing or reformatting it.

if (mHolder.getSurface() == null) {

// preview surface does not exist

return;

}

// stop preview before making changes

try {

mCamera.stopPreview();

} catch (Exception e) {

// ignore: tried to stop a non-existent preview

}

// set preview size and make any resize, rotate or

// reformatting changes here

// start preview with new settings

try {

mCamera.setPreviewDisplay(mHolder);

mCamera.startPreview();

} catch (Exception e) {

Log.d(TAG, "Error starting camera preview: " + e.getMessage());

}

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

}

}

获取CameraPreview后就可以对闪光灯进行操作

下面就是手电筒Demo的例子:

package com.cai.helloworld;

import java.util.List;

import android.hardware.Camera;

import android.hardware.Camera.Parameters;

import android.os.Bundle;

import android.provider.Settings;

import android.app.Activity;

import android.content.ContentResolver;

import android.content.Context;

import android.content.pm.PackageManager;

import android.util.Log;

import android.view.View;

import android.view.Window;

import android.view.WindowManager;

import android.widget.FrameLayout;

import android.widget.ImageButton;

import android.widget.Toast;

public class MainActivity extends Activity {

protected static final String TAG = ">>>>>>>MainActivity";

private Camera mCamera;

private CameraPreview mPreview;

private FrameLayout preview;

private boolean isopent;

private boolean isCameraExist;

private ImageButton captureButton;

private int defualtLigth;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

defualtLigth = getScreenBrightness(this);

isCameraExist = checkCameraHardware(this);

if (isCameraExist) {

controlFlashLigth();

} else {

Toast.makeText(this, "您的设备没有照相功能或者此功能不可用", Toast.LENGTH_LONG)

.show();

}

}

public void controlFlashLigth() {

// Create an instance of Camera

captureButton = (ImageButton) findViewById(R.id.button_capture);

mCamera = getCameraInstance();

// Create our Preview view and set it as the content of our

// activity.

mPreview = new CameraPreview(this, mCamera);

preview = (FrameLayout) findViewById(R.id.camera_preview);

preview.addView(mPreview);

preview.setVisibility(View.INVISIBLE);

captureButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (!isopent) {

v.setBackgroundResource(R.drawable.flashlight_on);

Toast.makeText(getApplicationContext(), "手电筒已开启",

Toast.LENGTH_SHORT)

.show();

turnLightOn(mCamera);

isopent = true;

} else {

v.setBackgroundResource(R.drawable.flashlight_off);

Toast.makeText(getApplicationContext(), "手电筒已关闭",

Toast.LENGTH_SHORT).show();

turnLightOFF(mCamera);

isopent = false;

}

}

});

}

/** A safe way to get an instance of the Camera object. */

public static Camera getCameraInstance() {

Camera c = null;

try {

c = Camera.open(); // attempt to get a Camera instance

} catch (Exception e) {

// Camera is not available (in use or does not exist)

}

return c; // returns null if camera is unavailable

}

/** Check if this device has a camera */

public boolean checkCameraHardware(Context context) {

if (context.getPackageManager().hasSystemFeature(

PackageManager.FEATURE_CAMERA)) {

// this device has a camera

return true;

} else {

// no camera on this device

return false;

}

}

@Override

protected void onResume() {

super.onResume();

Log.e(TAG, "onResume>>>>>runtime");

}

@Override

protected void onPause() {

super.onPause();

Log.e(TAG, "onPause>>>>>runtime");

}

@Override

protected void onDestroy() {

super.onDestroy();

Log.e(TAG, "onDestroy>>>>>runtime");

releaseCamera();

}

@Override

protected void onStop() {

super.onStop();

Log.e(TAG, "HomeANXIALE>>>onStop>>>>>runtime");

}

private void releaseCamera() {

if (mCamera != null) {

mCamera.release(); // release the camera for other applications

mCamera = null;

}

}

public void turnLightOn(Camera mCamera) {

if (mCamera == null) {

return;

}

Parameters parameters = mCamera.getParameters();

if (parameters == null) {

return;

}

List flashModes = parameters.getSupportedFlashModes();

// Check if camera flash exists

if (flashModes == null) {

// Use the screen as a flashlight (next best thing)

captureButton.setBackgroundColor(this.getResources().getColor(

R.color.white));

setBrightness(this, 255);

return;

}

String flashMode = parameters.getFlashMode();

if (!Parameters.FLASH_MODE_TORCH.equals(flashMode)) {

// Turn on the flash

if (flashModes.contains(Parameters.FLASH_MODE_TORCH)) {

parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);

mCamera.setParameters(parameters);

} else {

}

}

}

public void turnLightOFF(Camera mCamera) {

if (mCamera == null) {

return;

}

Parameters parameters = mCamera.getParameters();

if (parameters == null) {

return;

}

List flashModes = parameters.getSupportedFlashModes();

// Check if camera flash exists

if (flashModes == null) {

setBrightness(this, defualtLigth);

// Use the screen as a flashlight (next best thing)

return;

}

String flashMode = parameters.getFlashMode();

if (!flashMode.equals(Parameters.FLASH_MODE_OFF)) {

// Turn on the flash

if (flashModes.contains(Parameters.FLASH_MODE_OFF)) {

parameters.setFlashMode(Parameters.FLASH_MODE_OFF);

mCamera.setParameters(parameters);

} else {

}

}

}

/**

* 获取屏幕的亮度

*

* @param activity

* @return

*/

public static int getScreenBrightness(Activity activity) {

int nowBrightnessValue = 0;

ContentResolver resolver = activity.getContentResolver();

try {

nowBrightnessValue = android.provider.Settings.System.getInt(

resolver, Settings.System.SCREEN_BRIGHTNESS);

} catch (Exception e) {

e.printStackTrace();

}

return nowBrightnessValue;

}

/**

* 设置屏幕的亮度

*

* @param activity

* @return

*/

public static void setBrightness(Activity activity, int brightness) {

// Settings.System.putInt(activity.getContentResolver(),

// Settings.System.SCREEN_BRIGHTNESS_MODE,

// Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);

WindowManager.LayoutParams lp = activity.getWindow().getAttributes();

lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);

// lp.screenBrightness =(brightness) * (1f / 255f);

activity.getWindow().setAttributes(lp);

}

接下来就是新建一个布局文件activity_main.xml

布局中用到Framelayout,首先camera_preview用于获取camerapreview,之后用ImageButton对其进行覆盖。

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/camera_preview"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

android:id="@+id/button_capture"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@drawable/flashlight_off"

android:layout_gravity="center" />

第一次写这个也不知道要说些什么,有什么看不懂的可以留言提问,会及时回答的

手电筒软件测试初学者,新手学习android做得一个闪光灯手电筒(测试过很多机型都可以)...相关推荐

  1. android点击按钮弹出图片,用android做的一个简单的点击按钮显示图片的程序

    其实,在这之前我已经做了一个点击按钮的小程序,只不过它只是用来在界面上显示一些文字或者是用一个对话框来显示内容.按理说,做显示图片应该是不会有太大的问题了,可是问题还是来了.在我把这些个问题解决之后, ...

  2. 用Android做的一个简单的视频播放器

    視頻播放器项目功能需求 1 项目概述 1.1 项目描述 視頻播放器(以及視頻管理系統)是一款由java(Swing,安卓和数据库)做的手机视频播放器,可以看手机本地的各种视频,通过按钮进入手机视频管理 ...

  3. 学习Android:第一个app《hello word》

    从现在开始你的Android之旅吧!(又水了一行字,嘿嘿...) 新建一个项目 File  -->  New  -->  New project... 新建一个空项目 修改项目名.存储路径 ...

  4. 有什么软件测试新机,购买新机必做的五个检测,90%的人都忽略了最后一项!

    欢迎转载,请注明出处,抄袭必究! 大家都知道购买了新手机首先就要进行测试,如果不及时测试的话,发现问题的时候可能已经过了7天退换期限,尤其是网上购买的产品,需要退换就麻烦多了,今天就跟大家分享买了新手 ...

  5. 网上阅卷软件测试初学者,如何对网上阅卷系统的进行比较测试

    由于不同厂家的网上阅卷系统存在着开发技术.开发依据的不同,因而不同产品的功能.性能及使用方法也必然存在差异.为更好地选择产品,作为用户方,对不同产品进行对比性测试是一个可行,而且也是最可靠的方法. 如 ...

  6. python+ tkinter做的一个项目辅助测试工具

    python+tkinter 写的一个项目测试工具 目的是能够自动按照模板向禅道系统 提交bug,自动打包日志并上传到禅道上 以及结合进 项目中一些其他的功能,提升测试效率 主要是记录下 tkinte ...

  7. android开发:一个工具类搞定所有机型实现沉浸式状态栏

    1.在build.gradle引入依赖 implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3' 2.导入工具 ...

  8. 自己做的一个简历网页,有很多bug解决不了,有没有大神帮我看看

    今年年初找工作时自己利用掌握的前端知识写了这么一个网页,但是有好多bug自己解决不了,比如二级页加载太慢.滑屏返回不了.希望有大神能帮我看一下,看看怎么解决~~~~ 网址:qyued.com 转载于: ...

  9. Onedrive android 乱码,最后一个盘符总是出现很多乱码文件夹

    Hi Michael, 我已成功启动了 TrustedInstaller服务,但文件依然没有被清理掉. 我的电脑上没有安装Get-WindowsUpdatelog,我的系统是 Windows 8.我在 ...

最新文章

  1. SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证?
  2. python实现sobel_OpenCV-Python系列之Sobel和Scharr算子
  3. 编写一程序,有2个文本框,在第一个文本框中输入一个整数,当焦点从第一个文本框离开时,第二个文本框将显示这个数的绝对值(使用FocusListener)。
  4. JAVA的WebService规范JAX-WS
  5. android记账本统计_记账送老婆啦!初音 蕾姆 随便挑随便选| iOS 安卓
  6. .net mvc + layui做图片上传(二)—— 使用流上传和下载图片
  7. 【路径规划】基于matlab改进的遗传算法栅格地图路径规划【含Matlab源码 525期】
  8. 在vs里配置其他编译器
  9. FFT蝶形算法的verilog实现专题——FFT的matlab到verilog转化过程——第1部分
  10. mysql的dql_Mysql:dql(基本数据查询)
  11. NLP Lemmatisation(词性还原) 和 Stemming(词干提取) NLTK pos_tag word_tokenize
  12. Tomcat开启APR运行模式,优化并发性能
  13. iphone邮件服务器 263,如何在iPhone和iPad中设置使用263企业邮箱?
  14. Android 常用 RGB值以及中英文名称
  15. 【GAMES-202实时渲染】3、预计算环境光照(球谐函数(SH)、IBL、Split Sum、环境光阴影计算(PRT))
  16. java词云生成,kumo项目详解
  17. 程序员北漂没钱整租,如何爱上合租?
  18. 使用谷歌浏览器的speechSynthesis的API,实现语音播报功能
  19. SELinux之一:SELinux基本概念及基本配置
  20. oracle设置会计科目管理器,系列之四:ORACLE EBS基础设置要点简介(E) - season的日志 - 网易博客...

热门文章

  1. 【Python3解析二维码】翻遍全网找到 2 款库推荐给大家~
  2. 计算机视觉的深度学习实战四:图像特征提取
  3. visio移动形状 上下左右键 移动滚动条
  4. 在博客和论坛发外链还有用吗?
  5. js 带笔锋 签字版_2020年吉林大学体育学院硕士研究生复试《硕士研究生复试考生诚信考试承诺书》附件1(承诺书纸质版须由考生本人手写签字,扫描后随邮件返回,纸质签字版在复试现场向考官展示)...
  6. 基于paddlehub的粉圈微博生成
  7. 计算机内存4G,电脑内存4G和8G差距能有多大?
  8. 突破耐盐水稻生物育种 国稻种芯-何登骥:粮安向盐碱地要粮
  9. 三台计算机拓扑链接,规划服务器拓扑
  10. android 底部回弹,Android View滚动、拉伸到顶/底部弹性回弹复位