簡體   English   中英

按下按鈕時Flash未關閉(手電筒應用程序)

[英]Flash not being turned off on button press(Flashlight App)

我在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按鈕現在工作)

您的TurnOffFlash方法不能很好地覆蓋閃光燈閃爍。 你沒有停止線程,所以它繼續來回閃爍。 您還需要添加一行來覆蓋該部分:

Flashthread.interrupt();

這樣你就可以保持你的功能關閉閃存,如果線程正在運行SOS模式,你也會停止它。

旁注:您沒有遵循常見的Java命名法,其中方法和變量以小寫字母開頭並使用camelCase

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM