2016-08-20 42 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

谢谢。我能用一些标志解决这个问题 –

相关问题