按下按钮时Flash未关闭(手电筒应用程序)

时间:2016-08-20 11:18:29

标签: java android button flashlight

我在UI上有3个按钮。 On, Off and SOS(重复间隔闪烁)。如果我按下然后按下关闭按钮,闪光灯将按预期关闭。但是如果我按下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;
            }
        }

TurnOff机制如下:

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按钮现在可用)

1 个答案:

答案 0 :(得分:0)

您的TurnOffFlash方法无法很好地覆盖闪光灯闪烁。你没有停止线程,所以它继续来回闪烁。您还需要添加一行来覆盖该部分:

Flashthread.interrupt();

通过这种方式,您可以保持功能关闭闪存,如果线程正在运行SOS模式,您也可以将其停止。

  

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