私はモールスコードアプリで少しずつ作業していますが、カメラのフラッシュをうまく動かすことができない...フラッシュします。私の究極の目標は、簡単なメッセージを入力し、単一のボタンを押して、ユーザーが入力したメッセージをCharArrayなどでループすることによって、LEDをモールスコードで点滅させることです。ユーザーはまた、点滅/翻訳中にいつでもプロセスをキャンセルすることができます。このコードでトグルボタンを押すだけでライトをオン/オフできます。カメラの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();
}
}
});
そして私は、オンに与えられた遅延時間を待って、その後、ハンドラとpostDelayed()を使用して、このコードでボタンを1回押すだけで、それ自体をオフにするLEDを得ています。
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で次のエラーを取得します)。 2番目の関数呼び出しの開始時の行。
java.lang.RuntimeException:私は、複数のフラッシュの私の目標を達成する方法についての研究の多くを行っているし、最高の/唯一の現実的な解決策はのThread.sleepを使用することですカメラサービスに
を接続するのに失敗()。これがUIスレッド全体をスリープさせることは私の理解であり(これは私が使用している唯一のスレッドなので)、それは悪い習慣です。私の問題に他の解決策がありますか?私は簡単に複数のスレッドを見たが、すぐに圧倒され、それが私が望んでいた答えの聖杯であることが分からなかった。
アドバイスを事前にいただきありがとうございます。
可能な複製どのようにLEDの点滅/懐中電灯を急速に](http://stackoverflow.com/questions/16348418/android-how-to-blinkled-flashlight-rapidly) –