当循环开始时,其他一切都被忽略

时间:2014-09-03 11:59:35

标签: android

所以我试图写的和成功的是频闪仪(闪光灯在某些高频下闪烁)。但问题是,当我启动它时,它可以工作,但是当我再次按下按钮将其关闭时,没有任何反应。

代码块:

protected void onCreate(Bundle savedInstanceState) {

...

// Some code for checking if flashlight availabe and listener for seekbar for getting frequncy

...

// My button listener (but1 - button)

but1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (flashOn) {
                // turn off flash
                turnOffFlash();
            } else {
                // turn on flash
                turnFlashOn();
            }
        }
    });

现在主要的大部分代码,我不认为我可以跳过任何这个

private void getCamera() {
        if(cam == null) {
            try {
                cam = Camera.open();
                params = cam.getParameters();
            } catch(RuntimeException e) {
                Log.e("Camera failed to open", e.getMessage());
            }
        }
    }   
    private void turnFlashOn() {
        if(!flashOn) {
            if(cam == null || params == null) {
                return;
            }else {
              if (freq == 0) {
                  camParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
              }


              else {
                  sr = new StroboRunner();
                  sr.freq = freq;
                  t = new Thread(sr);
                  t.start();
                  strob = true;
                  return ;
              }

            }

        }
    }

    private void turnOffFlash() {
        if(flashOn){
            if(cam == null || params == null) {
                return;
            }
            if(strob){
                sr.stopRunning = true;
                t = null;
                strob = false;
                return;
            }
             else camParams.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        }
        cam.setParameters(camParams);
        cam.startPreview();

    }


     private class StroboRunner implements Runnable {

         int freq;
         boolean stopRunning = false;

         @Override
         public void run() {
             Camera.Parameters paramsOn = cam.getParameters();
             Camera.Parameters paramsOff = cam.getParameters();
             paramsOn.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
             paramsOff.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
             try {
                 while (!stopRunning) {
                    cam.setParameters(paramsOn);
                    cam.startPreview();

                    Thread.sleep(freq);

                    cam.setParameters(paramsOff);
                    cam.stopPreview();

                    Thread.sleep(freq);
                  }
                 }
             catch(Throwable t) {}
         }
     }

我不是很高级,所以我不知道我写的20%,因为它只有一半的教程和一半写我自己的代码。

1 个答案:

答案 0 :(得分:1)

我没有看到您设置flashOn的任何地方:

flashOn = true;

您可以点击该按钮,每次都获得!flashOn