2016-08-20 92 views
3

我在用戶界面上有3個按鈕。 (反覆閃爍閃爍)。如果按下「開」然後按「關」按鈕,閃光燈會按照預期關閉。但如果按SOS(定期閃爍),然後熄滅,則拒絕停止閃爍。的代碼如下:按下按鈕時閃光燈未關閉(手電筒應用程序)

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; 
    } 

編輯:方法onSOSPress()已經被更新,以反映工作SOS模式(OFF按鈕現在工作)

+0

試試這個: http://stackoverflow.com/questions/6068803/how-to-turn-on-camera-flash-light-programmatically-in-android –

+0

謝謝您的回覆!我之前嘗試過的鏈接幫助我打開和關閉閃光燈。我的問題依然存在,當我處於SOS模式時閃光燈沒有關閉,但當我處於正常的「開」模式時閃光燈關閉。也許它是我的onSOSPress方法中的線程問題,但我不太清楚解決這個問題,因爲我是Android新手! –

回答

0

您的TurnOffFlash方法不包括閃爍非常好。你不停止線程,所以它繼續來回閃爍。您需要添加一行覆蓋的那部分,以及:

Flashthread.interrupt(); 

這樣你保住功能關閉閃光燈,如果線程正在運行的SOS模式,你會停止它,以及。

旁註:你不按普通的Java命名其中的方法和變量以小寫字母,用camelCase

+0

謝謝您的回覆!我將這兩行添加到TurnOffFlash方法中,但它似乎沒有解決問題,因爲它在SOS模式下仍然不會停止LED閃爍。如果(SOSon) Flashthread.interrupt(); –

+1

以調試模式運行並查看它是否按照您的預期輸入函數。這可能不是目前的解決方案,但是讓您朝着正確的方向發展是一個普遍的想法。瞭解如何以不同的方式停止線程。 – Vucko

+0

謝謝。我能用一些標誌解決這個問題 –