此文章是因为有人问我怎么调用系统的闪光灯做手电筒才写出来的。比较简单,大牛见笑。
1、XML文件内定义两个按钮开启和关闭手电筒的。简单不列出了。
2、在Java文件中对两个按钮做出点击事件响应。调用了三个方法,torchOpen()、torchclose()、clear()。
package com.example.torchdemo;
import android.content.Context;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.PowerManager;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class TorchDemo extends ActionBarActivity {
private Button openTorch;
private Button closeTorch;
private Camera mCamera;
private PowerManager.WakeLock mScreenLock = null;
private PowerManager mPower = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.torch_demo);
openTorch = (Button) findViewById(R.id.openTorch);
closeTorch = (Button) findViewById(R.id.closeTorch);
openTorch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
torchOpen();
}
});
closeTorch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
torchClose();
<span style="white-space:pre"> </span>clear();
}
});
}
private void torchOpen() {
if (mCamera == null) {
mCamera = Camera.open();
}
Camera.Parameters parameters = mCamera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(parameters);
if (mScreenLock == null) {
mPower = (PowerManager) getSystemService(Context.POWER_SERVICE);
mScreenLock = mPower.newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "TORCH");
mScreenLock.acquire();
}
}
private void torchClose() {
if (mCamera == null)
mCamera = Camera.open();
Camera.Parameters parameters = mCamera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
mCamera.setParameters(parameters);
clear();
}
private void clear() {
if (mCamera != null) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
mCamera.setParameters(parameters);
mCamera.release();
mCamera = null;
if (mScreenLock != null) {
mScreenLock.release();
mScreenLock = null;
}
}
}
}
3、在编写完Java文件后需要添加响应的权限。
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-feature android:name="android.hardware.camera" />
可以后台运行。但是和相机的互斥没有做。与相机的互斥问题我在之前的文章中已经做过介绍。只是一个demo。