【问题标题】:Flash not being turned off on button press(Flashlight App)按下按钮时闪光灯未关闭(手电筒应用程序)
【发布时间】:2016-08-20 11:18:29
【问题描述】:

我在 UI 上有 3 个按钮。 On, Off and SOS(反复闪烁)。如果我按 On 然后按 Off 按钮,闪光灯按预期关闭。但如果我按 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 按钮现在可以使用)

【问题讨论】:

  • 感谢您的回复!我之前曾尝试过帮助我打开和关闭闪光灯的链接。我的问题仍然存在,当我处于 SOS 模式时闪光灯没有关闭,但在我处于正常“ON”模式时关闭。也许这是我的 onSOSPress 方法中的线程问题,但我不太确定解决这个问题,因为我是 Android 新手!

标签: java android button flashlight


【解决方案1】:

您的TurnOffFlash 方法不能很好地涵盖闪烁。您没有停止线程,因此它继续来回闪烁。您还需要添加一行来覆盖该部分:

Flashthread.interrupt();

这样,您将保持您的功能关闭闪光灯,如果线程正在运行 SOS 模式,您也将停止它。

附注:您没有遵循常见的 Java 命名法,其中方法和变量以小写字母开头并使用 camelCase

【讨论】:

  • 感谢您的回复!我在 TurnOffFlash 方法中添加了这两行,但它似乎并没有解决问题,因为它在 SOS 模式下仍然没有停止 LED 闪烁。 if(SOson) Flashthread.interrupt();
  • 在调试模式下运行,看看它是否按预期进入功能。目前这可能不是解决方案,但总体思路是让您朝着正确的方向前进。了解如何以不同的方式停止线程。
  • 谢谢。我能够用一些标志解决这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 2018-05-14
  • 2013-03-21
  • 1970-01-01
相关资源
最近更新 更多