如何让相机LED反复闪烁?

时间:2016-11-03 23:47:36

标签: android camera led flashlight blink

我现在已经在摩尔斯电码应用程序上工作了一段时间,我无法将相机闪光灯照相,嗯......闪光灯。我的最终目标是键入一条简短的消息,按一个按钮,然后让LED在摩尔斯电码中闪烁消息,方法是将用户输入的消息作为CharArray或其他内容循环。用户还应该能够在闪烁/翻译期间随时取消该过程。使用此代码,我可以通过触摸切换按钮轻松打开和关闭灯光。

     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线程(因为这是我使用的唯一线程),这是一个不好的做法。我的问题还有其他解决方案吗?我简短地看了很多线程,但很快就变得不知所措,并且不确定这是我希望的答案的圣杯。

提前感谢任何建议!

1 个答案:

答案 0 :(得分:-1)

我想到了两件事。

  1. 检查特定于cameraFlashlight的权限

    <permission android:name="android.permission.FLASHLIGHT"
     android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
     android:protectionLevel="normal"/>
    <uses-feature android:name="android.hardware.camera" />
    
  2. 尝试使用android.hardware.camera2 API,因为从Android API级别21弃用了Camera API。