2016-11-03 88 views
0

我一直在摩爾斯電碼應用程序的工作了一段時間,我無法獲得相機閃光燈,以及...閃光燈。我的最終目標是鍵入一個簡短的消息,按下一個按鈕,讓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線程(因爲這是我使用的唯一線程),這是一個不好的做法。有沒有其他解決方案來解決我的問題?我簡單地看了一下多個主題,但很快就變得不知所措,並不確定這是我所希望的答案的聖盃。

在此先感謝您的任何建議!

+0

[Android系統可能的複製如何快速閃爍led /手電筒](http://stackoverflow.com/questions/16348418/android-how-to-blink-led-flashlight-rapidly) –

回答

-1

我想起了兩件事。

  1. 具體到cameraFlashlight

    檢查權限
    <permission android:name="android.permission.FLASHLIGHT" 
    android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" 
    android:protectionLevel="normal"/> 
    <uses-feature android:name="android.hardware.camera" /> 
    
  2. 因爲攝像機API從Android的API級別棄用嘗試使用android.hardware.camera2 API 21

+0

感謝您的評論,但不幸的是它沒有幫助。我已經在清單中獲得了許可和使用功能,以便使應用程序的簡單手電筒部分起作用。工作代碼證明這是在我原來的職位。我也嘗試導入.camera2而不是.camera API,但Android Studio無法將其識別爲適當的導入。 –