【发布时间】:2016-11-03 23:47:35
【问题描述】:
我一直在开发摩尔斯电码应用程序一段时间,但我无法让相机闪光灯,嗯......闪光灯。我的最终目标是输入一条简短的消息,按一个按钮,然后通过循环用户输入的消息作为 CharArray 或其他东西,让 LED 以摩尔斯电码闪烁消息。用户还应该能够在闪烁/翻译期间随时取消该过程。使用此代码,我可以通过触摸切换按钮轻松打开和关闭灯。
mToggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
if (checked) {
camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
} else {
Camera.Parameters parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
camera.release();
}
}
});
我已经让 LED 亮起,等待给定的延迟时间,然后使用 Handler 和 postDelayed() 使用此代码按下一个按钮即可自行关闭。
Camera camera;
public void flash(int delay) {
camera = Camera.open();
final Camera.Parameters parameters = camera.getParameters();
Handler handler = new Handler();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
handler.postDelayed(new Runnable() {
public void run() {
Camera.Parameters parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
camera.release();
}
}, delay);
}
但是,如果我尝试在同一个按钮上多次运行上述闪光灯功能,我会在 Camera.open(); 处收到以下错误;第二个函数调用开始处的行。
java.lang.RuntimeException:连接相机服务失败
我已经对如何实现多次闪烁的目标进行了大量研究,最好/唯一可行的解决方案是使用 Thread.sleep()。据我了解,这会使整个 UI 线程休眠(因为这是我正在使用的唯一线程),这是一种不好的做法。我的问题还有其他解决方案吗?我简短地查看了多个线程,但很快就不知所措,不确定这是我所希望的答案。
提前感谢您的任何建议!
【问题讨论】:
标签: android camera led flashlight blink