2016-04-26 207 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