【问题标题】:How can I make the camera LED blink repeatedly?如何让摄像头 LED 反复闪烁?
【发布时间】: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


【解决方案1】:

我想到了两件事。

  1. 检查特定于相机手电筒的权限

    <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。

【讨论】:

  • 感谢您的评论,但不幸的是它没有帮助。我已经在清单中拥有了权限和使用功能,以便使应用程序的简单手电筒部分工作。证明这一点的工作代码在我的原始帖子中。我还尝试导入 .camera2 而不是 .camera API,但 Android Studio 无法将其识别为正确的导入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多