Я пытаюсь создать приложение азбуки Морзе, которое может воспроизводить Морзе со встроенным фонариком. Итак, я попробовал несколько вещей, одна из них немного работала, но не так, как должна.
По сути, я набираю сообщение, скажем, «привет». Это переводится как
.... . .-.. .-.. ---
Затем я хочу воспроизвести это, нажав кнопку. Я пробовал разные вещи. Это была моя первая попытка:
public void onPlayflash(View view) throws InterruptedException, CameraAccessException {
if (result == null) {
output.setText("ERROR");
} else {
currentposition = 0;
if (currentposition < result.length()) {
String c = String.valueOf(result.charAt(0));
if (c.equals("-")) {
//timeinmillis = 1000;
//setTimer();
flash.setTorchMode(flash.getCameraIdList()[0], true);
Thread.sleep(2000);
flash.setTorchMode(flash.getCameraIdList()[0], false);
} else if (c.equals(".")) {
//timeinmillis = 500;
//setTimer();
flash.setTorchMode(flash.getCameraIdList()[0], true);
Thread.sleep(1000);
flash.setTorchMode(flash.getCameraIdList()[0], false);
} else {
Thread.sleep(2000);
}
currentposition += 1;
}
}
}
Это не сработало. Он просто сказал:
I/Choreographer: Skipped (*always a random number over 1000 here*) frames! The application may be doing too much work on its main thread.
Затем я попытался
public void onPlayflash(View view) throws InterruptedException, CameraAccessException {
if (result == null) {
output.setText("ERROR");
} else {
for (int i = 0; i < result.length(); i++) {
String c = String.valueOf(result.charAt(i));
if (c.equals("_")) {
flash.setTorchMode(flash.getCameraIdList()[0], true);
Thread.sleep(2000);
flash.setTorchMode(flash.getCameraIdList()[0], false);
Thread.sleep(500);
} else if (c.equals(".")) {
flash.setTorchMode(flash.getCameraIdList()[0], true);
Thread.sleep(1000);
flash.setTorchMode(flash.getCameraIdList()[0], false);
Thread.sleep(500);
} else {
Thread.sleep(1500);
}
}
}
}
Это вроде сработало, но все еще говорит
I/Choreographer: Skipped (*always a random number over 1000 here*) frames! The application may be doing too much work on its main thread.
На самом деле воспроизведение начинается нормально, но затем оно начинает давать сбои и пропускает части итерации.
Как видите, я также экспериментировал с android.os.CountDownTimer, но это тоже не сработало. У меня была только одна вспышка, а потом она прекратилась.
Как видите, я еще не настолько опытен '^^ Надеюсь, вы сможете мне помочь. Заранее спасибо!