package fengxing.primer.study2;
import android.content.Context;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;
public class CameraActivity extends AppCompatActivity {
private static final String TAG = CameraActivity.class.getSimpleName();
//相机特新管理
private CameraManager cameraManager;
//回调函数
private CameraManager.TorchCallback torchCallback;
private String[] cameraList;
//开关
private Switch aSwitch;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
initFlashLight();
initListener();
}
/**
* 设置switch开关监听
*/
private void initListener() {
aSwitch = findViewById(R.id.switch_light);
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (cameraList==null)return;
try {
cameraManager.setTorchMode(cameraList[0],isChecked);
} catch (CameraAccessException e) {
e.printStackTrace();
}
Log.d(TAG, "onCheckedChanged: "+cameraList.toString());
}
});
}
/**
* 初始化闪光灯
*/
@RequiresApi(api = Build.VERSION_CODES.M)
private void initFlashLight() {
cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
torchCallback = new CameraManager.TorchCallback(){
//闪关灯改变
@Override
public void onTorchModeChanged(@NonNull String cameraId, boolean enabled) {
super.onTorchModeChanged(cameraId, enabled);
Log.d(TAG, "onTorchModeChanged: "+cameraId+" "+ enabled);
}
//闪关灯不可用
@Override
public void onTorchModeUnavailable(@NonNull String cameraId) {
super.onTorchModeUnavailable(cameraId);
Log.d(TAG, "onTorchModeUnavailable: ");
Toast.makeText(getApplicationContext(),"电筒不可用",Toast.LENGTH_SHORT);
}
};
//获取相机列表
try {
cameraList = cameraManager.getCameraIdList();
} catch (CameraAccessException e) {
e.printStackTrace();
}
//使其在一个handle机制中运行
cameraManager.registerTorchCallback(torchCallback,new Handler());
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onDestroy() {
super.onDestroy();
cameraManager.unregisterTorchCallback(torchCallback);
}
}
打开和关闭Android后置闪关灯
最新推荐文章于 2023-07-13 17:20:59 发布