添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FLASHLIGHT"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.handware.camera"></uses-permission>
<uses-permission android:name="android.handware.autofocus"></uses-permission>
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.flash"
android:required="false" />
<uses-feature
android:name = "android.hardware.camera.autofocus" />
设置手电筒按钮,选中状态通过selector改变。
package com.ty.tool.call.mylight;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ToggleButton;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
public ToggleButton toggleButton;
private Camera camera;
private Camera.Parameters parameters;
private CameraManager mCameraManager;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView(); //初始化控件
initListener(); //手电筒的点击事件
}
private void initListener() {
//手机手电筒开关的监听事件
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//选中打开手电筒
if(isChecked) {
openLight();
}else {
//未选中关闭手电筒
closeLight();
}
}
});
}
//TODO 打开手电筒
private void openLight() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
if(mCameraManager!=null) {
mCameraManager.setTorchMode("0", true);
}
} catch (Exception e) {
//Toast.makeText(this,"Your version is not supported or the current flash is occupied!",Toast.LENGTH_SHORT).show();
Log.i("","Open the abnormal! " + e);
}
}else {
try {
if (camera == null){
// camera = Camera.open();
try {
camera = Camera.open();
} catch (Exception e) {
//Toast.makeText(getBaseContext(), "Camera is used please closed", Toast.LENGTH_SHORT).show();
}
}
if(camera != null) {
parameters = camera.getParameters();
if (parameters != null) {
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
}
}
}catch (Exception e){
Log.i("","Open the abnormal! " + e);
}
}
}
//todo 关掉手电筒
private void closeLight() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
if(mCameraManager!=null) {
mCameraManager.setTorchMode("0", false);
}
} catch (Exception e) {
Log.i("","Close the abnormal! " + e);
}
}else {
if (camera == null) {
return;
}
try {
parameters = camera.getParameters();
if(parameters!=null) {
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
}
camera.stopPreview();
}catch (Exception e){
Log.i("","Close the abnormal! " + e);
}
}
}
private void initView() {
toggleButton = (ToggleButton) findViewById(R.id.btn_light);
}
}