android - 由于现有相机用户,相机“0”的手电筒不可用
问题描述
我想创建一个应用程序,该应用程序具有一个用于录制视频的按钮和另一个用于在录制视频期间打开闪光灯的单独切换按钮。
我已经使用 camera2 API 为最近的 androids 构建了相机应用程序,该应用程序由图像按钮访问。我将手电筒模式访问设置为切换按钮,但这根本不起作用。但是切换按钮可以单独访问闪光灯。
public class MainActivity extends AppCompatActivity {
private TextureView.SurfaceTextureListener mSurfaceTextureListener = new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
setupCamera(width,height);
connectCamera();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createFolder();
mMediaRecorder = new MediaRecorder();
mTextureView = (TextureView) findViewById(R.id.textureView);
mRecordButtonimg = (ImageButton) findViewById(R.id.video_online_button);
mRecordButtonimg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (misRecording) {
misRecording = false;
mRecordButtonimg.setImageResource(R.mipmap.ic_launcher);
mMediaRecorder.stop();
mMediaRecorder.reset();
startPreview();
} else {
checkWriteStoragePermission();
misRecording = true;
mRecordButtonimg.setImageResource(R.mipmap.ic_launcher_round);
}
}
});
mButtonLights = (ToggleButton) findViewById(R.id.buttonLights);
mButtonLights.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
cameraManager.setTorchMode(mCameraId, mButtonLights.isChecked());
}catch (CameraAccessException e){
e.printStackTrace();
}
}
});
}
}
我刚刚将设置的手电筒模式添加到 onClickListener。我应该在其他地方添加它吗?因为它不会将其添加到预览中!而且我已经在代码中检查后置摄像头(带手电筒的 id 为 0),所以我不知道为什么代码不起作用。
解决方案
弄清楚如何在相机预览时打开和关闭手电筒。在按钮上单击以打开/关闭灯,使用以下代码:
//at some other function where camera is initialised and start preview
//...
Camera camera = Camera.open();
camera.startPreview();
//...
boolean lightOn = false;
//...
buttonLight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Camera.Parameters p = camera.getParameters();
if (!lightOn) {
lightOn = true;
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
} else {
lightOn = false;
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
}
}
});
快乐编码!:D
推荐阅读
- c# - WMI 搜索的重叠属性?
- delphi-10-seattle - RandomStr 缺少运算符或分号错误
- maxima - 求解后简化方程
- python-3.x - Metpy HRRR 横截面
- php - PHP 表单提交 - 语法错误
- python - Django:根据父键和外键模型中的字段获取所有父数据
- javascript - 映射对象键时使通用对象可选(在 keyof 中)
- python - 尝试更新 Pandas 数据框时获取“RuntimeError:生成器引发的 StopIteration”
- node.js - Sails-mongo createdAt 日期不正确
- java - 无论在何处指定,如何读取 Spring 数据源 URL 的值?