如何闪烁手电筒?

时间:2016-04-26 05:32:02

标签: java android arrays string algorithm

在过去的2个小时里,我一直试图让我的机器人的手电筒闪烁,我似乎无法让它工作。我想要的是每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();
    }

大多数其他帖子建议使用非连续闪烁,或使用类似于此方法,但在处理程序中,但没有一个正在工作。这是我最接近的尝试。

我怎么能闪烁手电筒?另外,没有相机许可,有没有办法做到这一点?

2 个答案:

答案 0 :(得分: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 :(得分:-1)

尝试使用此代码而不是使用切换方法,0和1用于ON和OFF Flash Light。

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

没有&#34; Thread.sleep()&#34;你的代码可能太快了。