gpt4 book ai didi

android - 如何让相机灯按特定顺序闪烁?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:16 24 4
gpt4 key购买 nike

我正在开发一个简单的摩尔斯电码应用程序,可以将英语转换为摩尔斯电码,反之亦然。当用户输入特定字母时,设备上的相机灯应该会闪烁该字母的摩尔斯序列,例如:

A = 点划线,点为 200 毫秒,划线为 500 毫秒。

问题是我不确定如何实现这一目标。我一直在尝试使用 for 循环来解决这个问题,但我似乎无法解决它。下面是我目前正在尝试调整的代码——我不确定使用 for 循环是否是最好的方法,但我想不出其他方法。有没有人有任何建议/想法,如果有的话,我们将不胜感激。

  public void flashTranslation() {

char[] cArray = message.toCharArray();

for (int i = 0; i < cArray.length; i++) {


if (cArray[i] == '.') {
turnOn();

new Handler().postDelayed(new Runnable() {

@Override
public void run() {
turnOff();

camera.release();
}
}, dot);

} else {

turnOn();

new Handler().postDelayed(new Runnable() {

@Override
public void run() {
turnOff();

camera.release();
}
}, dash);
}

}
}

public void turnOn() {

if (camera != null) {
Camera.Parameters p = camera.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
camera.startPreview();
}


}

public void turnOff() {

if (camera != null) {
Camera.Parameters p = camera.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
camera.stopPreview();
}
}

最佳答案

此代码可能会给您带来问题的原因是灯关闭和再次打开之间没有时间。

瞬间,灯亮了。然后,runnable 在关闭之前等待 200 毫秒。关闭后,它会立即再次打开它,这意味着虽然从打开到关闭之间的时间点是 200 毫秒,但从关闭到重新打开之间的时间是(接近)0 毫秒。这可能会导致灯看起来一直亮着,没有任何预期的暂停。

如果我没记错的话,创建一个新的 postDelayed 处理程序只是在一个新线程上执行一个 runnable,这并不是您真正想要的,因为您希望在队列中读取莫尔斯码。

尝试这样的事情:

public void flashTranslation() {
int offIntervalTime = 50;

char[] cArray = message.toCharArray();

for (int i = 0; i < cArray.length; i++) {
if (cArray[i] == '.') {
turnOn();
Thread.sleep(dot);

turnOff();
Thread.sleep(offIntervalTime);
} else {
turnOn();
Thread.sleep(dash);

turnOff();
Thread.sleep(offIntervalTime);
}
}
}

您可能还需要为线程中断实现异常处理,但这是您可以使用的基本结构。注意有一个 offIntervalTime 变量。这用于定义灯应该关闭的恒定间隙,从而允许它实际闪烁。

当你调用这个函数时,确保它不在主线程上,所以在你调用它的地方做这样的事情:

Thread morseMessageThread = new Thread(new Runnable() { flashTranslation() });
morseMessageThread.start();

关于android - 如何让相机灯按特定顺序闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34556596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com