如何在Android中停止LED的闪烁?

时间:2015-01-25 13:13:59

标签: android led blink

我正在尝试制作一个Android应用程序,当用户按下闪烁按钮时,它会使相机LED闪烁。我能够使LED闪烁。我已添加了另一个按钮,可在用户需要时停止LED闪烁,但我无法停止闪烁。

我应该添加什么来阻止LED眨眼?

这是我的代码:

import android.app.Activity;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {


    Button blinkled,stop;
    private Camera camera;
    private boolean isFlashOn;
    private boolean hasFlash;
    Parameters params;

    String myString;
    long blinkDelay =200;
    int i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getActionBar().hide();


        blinkled= (Button) findViewById(R.id.blink);
        stop= (Button) findViewById(R.id.stop);

        // get the camera
        getCamera();

        blinkled.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Runnable r = new Runnable() {
                    @Override
                    public void run() {

                        long start = System.currentTimeMillis();
                        long end = start + 5 * 1000;
                        while (System.currentTimeMillis() < end) {


                            for (i = 0; i < 2; i++) {
                                if (i % 2 == 0) {
                                    turnOnFlash1();
                                } else if (i % 2 == 1) {
                                    turnOffFlash1();
                                }


                                try {
                                    Thread.sleep(blinkDelay);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
                };

                Thread th = new Thread(r);
                th.start();
            }
        });


    }

    /*
     * Get the camera
     */
    private void getCamera() {
        if (camera == null) {
            try {
                camera = Camera.open();
                params = camera.getParameters();
            } catch (RuntimeException e) {
                Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
            }
        }
    }

    private void turnOnFlash1() {
        if (!isFlashOn) {
            if (camera == null || params == null) {
                return;
            }


            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_TORCH);
            camera.setParameters(params);
            camera.startPreview();
            isFlashOn = true;


        }

    }

    private void turnOffFlash1() {
        if (isFlashOn) {
            if (camera == null || params == null) {
                return;
            }


            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_OFF);
            camera.setParameters(params);
            camera.stopPreview();
            isFlashOn = false;


        }
    }

    if (camera != null) {
        camera.release();
        camera = null;
    }
}

2 个答案:

答案 0 :(得分:0)

要停止闪烁,您需要停止开始闪烁的可运行状态。这是你可以停止运行的方法:https://stackoverflow.com/a/19894653/1239966

答案 1 :(得分:0)

这可能不是您所指的,但您的停止按钮stop= (Button) findViewById(R.id.stop);并未连接到任何OnClickListener,因此如果您尝试通过点击停止按钮来停止闪烁,则代码不会知道如何做出反应,直到你分配一个听众(就像你使用blinkled按钮一样。

另一方面,以下代码似乎放错地方了:

if (camera != null) {
        camera.release();
        camera = null;
    }

它没有包含在任何函数中,因此很可能它没有在您期望的时候运行。