代码如下:
一个Activity里面,添加了一个View,是全屏的。退出Activity时,关闭闪光灯,要释放Camera。
import android.app.Activity;XML文件布局很简单,如下:
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
public class TorchActivity extends Activity {
private Camera camera;
private Parameters parameters;
private boolean is_open_torch;
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
requestWindowFeature(Window.FEATURE_NO_TITLE); // 去掉标题栏
setContentView(R.layout.activity_torch);
view = (View) findViewById(R.id.view_torch);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!is_open_torch) {
// 开启闪光灯(手电筒)
openTorch();
} else {
// 关闭闪光灯
closeTorch();
}
}
});
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
closeTorch();
super.onStop();
}
// 打开闪光灯做手电筒
private void openTorch() {
camera = Camera.open();
parameters = camera.getParameters();
// 判断闪光灯是否存在
if (parameters.getFlashMode() == null) {
Toast.makeText(this, "本机没有闪光灯装置!", Toast.LENGTH_SHORT).show();
return;
}
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
is_open_torch = true;
view.setBackgroundResource(R.drawable.on);
}
// 关闭手电筒
private void closeTorch() {
if (camera != null) {
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;
parameters = null;
}
is_open_torch = false;
view.setBackgroundResource(R.drawable.off);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TorchActivity" >
<View
android:id="@+id/view_torch"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/off" />
</RelativeLayout>
要注意给应用加访问权限:
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
PS:
我是按着小米手机的手电筒做的,之后发现两个问题:
1、小米自己做的手电筒打开后还能打开camera,我写的不行,退出Activity时我将闪光灯关闭了,不然进不了camera。
2、小米手机的手电筒开和关状态切换很快,自己写的稍慢。
以上两个问题未解决,如有高手看见,还忘赐教。