我一直在摩爾斯電碼應用程序的工作了一段時間,我無法獲得相機閃光燈,以及...閃光燈。我的最終目標是鍵入一個簡短的消息,按下一個按鈕,讓LED以摩爾斯電碼的形式閃爍消息,方法是通過用戶輸入的消息循環顯示爲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開啓,等待給定的延遲時間,然後通過處理器和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系統可能的複製如何快速閃爍led /手電筒](http://stackoverflow.com/questions/16348418/android-how-to-blink-led-flashlight-rapidly) –