0
    cameraOn();
    while (counter == 1){
        if(counter == 0){
             cameraOn();
             counter += 1;
         }else{
            cameraOff();
            counter -= 1;
          }
    }

方法是:

private void cameraOff() {
            // TODO Auto-generated method stub
             parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
             camera.setParameters(parameters);
             camera.release();
             camera = null;
        }

        private void cameraOn() {
            // TODO Auto-generated method stub
            camera = Camera.open();
             parameters = camera.getParameters();
             parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
             camera.setParameters(parameters);
        }

我有一个按钮必须打破循环并完成活动:

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if (camera == null){
        finish();
    }else{
         parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
         camera.setParameters(parameters);
         camera.release();
         camera = null;
         finish();
    }

我是一个初学者,我不明白循环是如何工作的,我用计数器坚持我可以做到,但它没有用。我正在尝试让相机闪光灯在循环中每秒闪烁一次,直到我按下按钮。请帮我。谢谢

4

3 回答 3

2

if (counter == 0) 永远不会为真,因为在这种情况下您的循环将退出。

于 2012-12-20T19:28:35.420 回答
1

您的代码的以下部分将永远不会执行,因为您只有在 counter == 1 时才进入 while 块。

 if(counter == 0){
            cameraOn();
            counter += 1;

因此,如果您曾经输入过 while 块while (counter == 1),您将始终调用 cameraOff() 方法。换句话说,您的 if 语句永远不会为真,而 else 语句将始终被执行。

于 2012-12-20T19:36:42.747 回答
1

正如其他人所说,仅当counter == 0时才进入循环意味着它永远不会进入需要counter == 1的内部循环,并且永远不会进入cameraOn()。

试试这个:

清除您的 onClick 方法并将其替换为:

@Override public void onClick(View v) {
    cameraOff();
    /* or 'toggle();' if you prefer, see below */
}

(因为它似乎做完全相同的事情。)

注释掉/删除整个嵌套循环,并确保在某处调用 cameraOn() 或 toggle() 以开始工作。

要设置切换,您可以添加一个static Boolean isFlashActive;(或以其他方式检测 flash 状态,我还没有使用该 api)

..并添加一个功能:

private toggle(){
    if ( isFlashActive ) {
        cameraOff();
    } else {
        cameraOn();
    }
    /* delay? */
}

对于切换延迟,您有几个选择:

Runnable首先,您可以通过一个或一个android选项从另一个线程调用toggle(),例如AsyncTask将wait()添加到toggle函数中以提供延迟;

Second is my personal favorite, which is to setup an intent receiver then use setRepeating() with a PendingIntent.

于 2012-12-20T19:55:41.610 回答