如何在Android中停止LED的闪烁?
如何在Android中停止LED的闪烁?
我正在尝试制作一个Android应用程序,当用户按下闪烁按钮时,会闪烁相机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);
// 获取相机
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();
}
});
}
/*
* 获取相机
*/
private void getCamera() {
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
} catch (RuntimeException e) {
Log.e("相机错误。无法打开。错误:", 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;
}
}
问题的原因是没有正确停止可运行的线程,导致LED灯一直在闪烁。解决方法是通过停止可运行的线程来停止闪烁。可以使用以下代码来停止线程:https://stackoverflow.com/a/19894653/1239966。同时,需要注意在可运行的线程内部正确调用关闭LED灯的函数。