2016-11-03 29 views
0

私はモールスコードアプリで少しずつ作業していますが、カメラのフラッシュをうまく動かすことができない...フラッシュします。私の究極の目標は、簡単なメッセージを入力し、単一のボタンを押して、ユーザーが入力したメッセージを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スレッド全体をスリープさせることは私の理解であり(これは私が使用している唯一のスレッドなので)、それは悪い習慣です。私の問題に他の解決策がありますか?私は簡単に複数のスレッドを見たが、すぐに圧倒され、それが私が望んでいた答えの聖杯であることが分からなかった。

アドバイスを事前にいただきありがとうございます。

+0

可能な複製どのようにLEDの点滅/懐中電灯を急速に](http://stackoverflow.com/questions/16348418/android-how-to-blinkled-flashlight-rapidly) –

答えて

-1

私の頭には2つのことがあります。 cameraFlashlight

に固有

  1. チェック権限

    <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

コメントありがとう、残念ながらそれは助けてくれなかった。私は、アプリケーションの簡単な懐中電灯の部分を動作させるために、マニフェストに既に許可と用途を持っていました。これを証明するための作業コードは、私の元の投稿にあります。私はまた、.camera APIの代わりに.camera2をインポートしようとしましたが、Android Studioはそれを適切なインポートとして認識しません。 –

関連する問題