1.UI设计
<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭手电筒"
android:layout_marginLeft="30px"
android:layout_marginTop="500px"
android:layout_centerHorizontal="true"
android:id="@+id/btn1"
/>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30px"
android:layout_marginTop="900px"
android:layout_centerHorizontal="true"
android:text="打开手电筒"/>
</RelativeLayout>
- 控制手电筒亮灭的工具类FlashUtils
package com.example.demo2;
import android.content.Context;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.hardware.Camera;
import android.text.method.Touch;
import java.util.Optional;
public class FlashUtils {
private CameraManager manager;
private Camera mCamera = null;
private Context context;
private boolean status = false; // 记录手机状态
FlashUtils(Context context){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
}
this.context = context;
}
// 打开手电筒
public void open(){
if(status) { //如果是打开状态,不需要打开
return;
}
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
try {
manager.setTorchMode("0",true);
} catch (CameraAccessException e)
{
e.printStackTrace();
}
} else {
PackageManager packageManager = context.getPackageManager();
FeatureInfo[] features = packageManager.getSystemAvailableFeatures();
for(FeatureInfo featureInfo : features)
{
// 判断设备是否支持闪光灯
if(packageManager.FEATURE_CAMERA_FLASH.equals(featureInfo.name)) {
if(null == mCamera)
{
mCamera = Camera.open();
}
Camera.Parameters parameters = mCamera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
}
}
status = true; // 记录手电筒状态为打开
}
// 关闭手电筒
public void cloes()
{
if(!status) // 如果是已经关闭的状态 不需要打开
{
return;
}
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
try {
manager.setTorchMode("0",false);
}catch (CameraAccessException e)
{
e.printStackTrace();
}
} else {
if(mCamera != null)
{
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
status = false; // 记录手电筒为关闭
}
}
- 在MainActivity中调用工具类来控制手电筒
package com.example.demo2;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button btn1;
Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);
FlashUtils flashUtils = new FlashUtils(this);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 关闭手电筒
Log.d("chen", "close led");
flashUtils.cloes();
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 打开手电筒
Log.d("chen", "open led");
flashUtils.open();
}
});
}
}
- 测试apk所用手机是Android 9.0系统,可以正常控制手电筒亮灭