2016-08-20 6 views
3

UIに3つのボタンがあります。 On, Off and SOS(繰り返し間隔で点滅)。 Onを押してからOffボタンを押すと、フラッシュが期待どおりに消灯します.SOSを押すと(定期的に点滅している)、Offにすると点滅が止まりません。ボタンを押したときにフラッシュがオフにならない(懐中電灯アプリ)

SOSbutton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        try { 
       SOSon = true; 
       startSOS(); 
       onSOSPress(); 
      } catch (Exception ex) { 
       throw ex; 
      } 
      } 
     }); 
void onSOSPress() { 
      try { 
       Flashlight flashlight=new Flashlight(); 
       SOSon = true; 
        flashlight.Flashthread = new Thread(new Runnable() { 
          @Override 
          public void run() { 
           for (int i = 0; i < System.currentTimeMillis(); i++) { 
            while (!FlashThreadStop) { 
             if (FlashOn) { 
              myParameters.setFlashMode(Parameters.FLASH_MODE_OFF); 
              try { 
               myCamera.setParameters(myParameters); 
              } 
              catch (Exception ex) 
              { 
               //logger.log(Level.SEVERE, "an exception was thrown", ex); 
              } 
              myCamera.stopPreview(); 
              FlashOn = false; 
             } else { 
              TurnOnFlash(); 
             } 
             try { 
              Thread.sleep(100); 
             } catch (InterruptedException e) { 
              e.printStackTrace(); 
             } 
            } 

           } 
          } 
         }); 
         flashlight.Flashthread.start(); 
      } catch (Exception ex) { 
       throw ex; 
      } 
     } 

と次のようにターンオフ機構は:以下のようにコードがある

off.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if (FlashOn) { 

        // turn off flash 
        TurnOffFlash(); 

       } 
      } 
     }); 

private void TurnOffFlash() { 

     if (FlashOn) { 

      if (myCamera == null || myParameters == null) { 
       return; 

      } 

      myParameters = myCamera.getParameters(); 
      myParameters.setFlashMode(Parameters.FLASH_MODE_OFF); 
      myCamera.setParameters(myParameters); 
      myCamera.stopPreview(); 
      FlashOn = false; 

     } 
    } 
void endSOS(){ 
     FlashThreadStop=true; 
    } 
    void startSOS(){ 
     FlashThreadStop=false; 
    } 

EDIT:方法onSOSPress()OFF(作業SOSモードを反映するように更新されていますボタンが今働く)

+0

これを試してみてください:http://stackoverflow.com/questions/6068803/how-to-turn-on-camera-flash-light-programmatically-in-android –

+0

は、ご返信いただきありがとうございます!私は先に、最初の場所でフラッシュをオン/オフするのに役立つリンクを試していました。私の問題は、SOSモードではオフにならず、通常の「オン」モードではオフになります。多分私のonSOSPressメソッドでスレッディングなどの問題があるかもしれませんが、私がAndroidに慣れ親しんでいるので、これを解決することについてはあまりよく分かりません! –

答えて

0

あなたのTurnOffFlash方法はフラッシュ点滅を非常にうまくカバーしません。スレッドを停止していないので、前後に点滅し続けます。あなたにもその一部を覆うように1行を追加する必要があります。

Flashthread.interrupt(); 

あなたの機能は、フラッシュをオフにしておこう、とスレッドがSOSモードを実行している場合、あなたは同様にそれを停止されます。この道を。

サイドノート:あなたはメソッドと変数は、小文字で始まり、camelCaseを使用する一般的なJavaの命名法に従うことを失敗しています。

+0

返信いただきありがとうございます!私はこれらの2行をTurnOffFlashメソッドに追加しましたが、SOSモードでLEDが点滅するのを止めないので、問題を解決していないようです。 if(SOSon) Flashthread.interrupt(); –

+1

デバッグモードで実行し、期待どおりに関数に入るかどうかを確認します。これは現時点での解決策ではないかもしれませんが、あなたを正しい方向に動かすのが一般的な考えです。スレッドを別の方法で停止する方法を参照してください。 – Vucko

+0

ありがとうございます。私はこの問題をいくつかのFlagsで解決することができました –

関連する問題