Я пытаюсь создать приложение с азбукой Морзе, которое может воспроизводить азбуку Морзе встроенным фонариком. Поэтому я попробовал несколько вещей, одна из которых немного сработала, но не так, как должно.
Так что, по сути, я набираю сообщение, скажем "привет". Это переводится как
.... . .-.. .-.. ---
Тогда я хочу воспроизвести это, нажав кнопку.
Я пробовал разные вещи. Это была моя первая попытка:
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, но это не сработало. У меня только одна вспышка, а потом она остановилась.
Как вы могли заметить, я еще не настолько опытен '^^
Надеюсь, ты сможешь мне помочь. Заранее спасибо!