2016-04-26 208 views
-1

我一直試圖在最近2個小時內使我的android手電筒閃爍,而且我似乎無法使其工作。我想要的是每500毫秒左右重複閃爍一次手電筒,直到我點擊一個按鈕。如何閃爍手電筒?

這是我試過的,它什麼也沒做。它甚至沒有打開手電筒或產生一個異常:

private void blinkLight() { 
     cam = Camera.open(); 
     params = cam.getParameters(); 

     Thread t = new Thread(){ 
      public void run(){ 
      while(userHasntPressedButton){ 
       params.setFlashMode(Camera.Parameters.FLASH_MODE_ON); 
       try { 
        currentThread().sleep(500); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 

       } 
      } 
     }; 
     t.start(); 
    } 

大多數其他職位採用非連續閃爍,或者使用類似這種方法建議,但在一個處理器,但沒有正常工作。這是我最接近的嘗試。

如何閃爍手電筒?另外,有沒有辦法做到這一點,沒有相機的權限?

+0

你不想在'FLASH_MODE_OFF'之後再睡一次,否則它會回到頂部,立即做'FLASH_MODE_ON' - 比眼睛快 –

+2

我認爲沒有相機的許可是不可能的。 –

+0

沒有調用'camera.startPreview();'它不能工作....我假設... – Opiatefuchs

回答

0

看看這段代碼如果你有任何疑問你可以問! 使用線程類來處理這些類型的任務,希望這會幫助你:)它的工作對我來說也是謝謝!

public void lightBlinking() 
    { 
    if (blink) { 

     flashThread = new Thread(new Runnable() { 


      @Override 
      public void run() { 
       for (int i = 0; i < System.currentTimeMillis(); i++) { 

        if (isFlashOn) { 
         turnOffFlash();<--- // method to OFF flash light 

        } else { 
         turnOnFlash();<--- // method to ON flash light 


        } 

        try { 
          Thread.sleep(1000);<---- // set your time 

        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
        if (!blink){ <--- // asign true false for this boolean      
             //when you want to blink your flash 
         flashThread.stop(); 
         break; 
        } 
       } 


      } 


    }); 
    flashThread.start(); 


    } 
} 
-1

試試這個代碼,而不是使用切換方法,0和1的ON和OFF閃光燈。

String myString = "0101010101"; 
long blinkDelay 500; //Delay in ms 
for (int i = 0; i < myString.length(); i++) { 
    if (myString.charAt(i) == '0') { 
     params.setFlashMode(Parameters.FLASH_MODE_ON); 
    } else { 
     params.setFlashMode(Parameters.FLASH_MODE_OFF); 
    } 
    try { 
     Thread.sleep(blinkDelay); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

沒有「Thread.sleep()」,你的代碼可能太快了。

+0

這將只會閃爍5次...我希望它閃爍無限。 –

+0

使用真正的循環,並使用登錄的模數甚至奇數如果提醒是零它意味着關閉和提醒1它表示ON – Attaullah