闪光灯当做手电筒使用

时间:2022-09-11 07:51:45

       

代码如下:

一个Activity里面,添加了一个View,是全屏的。退出Activity时,关闭闪光灯,要释放Camera。

import android.app.Activity;
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);
}

}
XML文件布局很简单,如下:

<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、小米手机的手电筒开和关状态切换很快,自己写的稍慢。

以上两个问题未解决,如有高手看见,还忘赐教。