【问题标题】:How to blink flashlight?如何让手电筒闪烁?
【发布时间】:2016-04-26 05:32:02
【问题描述】:

在过去的 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();
    }

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

如何让手电筒闪烁?另外,有没有什么方法可以在没有摄像头许可的情况下做到这一点?

【问题讨论】:

  • 你不想在FLASH_MODE_OFF 之后再睡觉,否则它会循环到顶部并立即执行FLASH_MODE_ON - 比眼睛快
  • 我认为没有相机许可是不可能的。
  • 不调用camera.startPreview(); 它不能工作..我假设..
  • 并确保您已使用 CAMERA 并且可能添加了 FLASHLIGHT 权限(不确定 FLASHLIGHT,但此权限存在于 Android 中)...

标签: java android arrays string algorithm


【解决方案1】:

如果您有任何疑问,请查看此代码! 使用线程类来处理这些类型的任务希望这会对你有所帮助:) 它对我的工作也谢谢!

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


    }
}

【讨论】:

    【解决方案2】:

    试试这个代码,而不是使用切换方法,0 和 1 用于打开和关闭闪光灯。

    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()”,您的代码可能太快了。

    【讨论】:

    • 那只会闪5次...我希望它无限闪。
    • 使用真正的while循环并使用带模的偶奇数登录,如果提醒为零则表示关闭,提醒1表示打开
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多