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

7 浏览
0 Comments

如何在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;

}

}

0
0 Comments

问题原因:stop按钮没有与OnClickListener连接,因此代码不知道如何停止闪烁。另外,释放相机的代码没有放在函数中,可能没有在预期时运行。

解决方法:为stop按钮分配一个OnClickListener,确保代码知道如何停止闪烁。将释放相机的代码放置在适当的函数中,以便在预期时运行。

0
0 Comments

问题的原因是没有正确停止可运行的线程,导致LED灯一直在闪烁。解决方法是通过停止可运行的线程来停止闪烁。可以使用以下代码来停止线程:https://stackoverflow.com/a/19894653/1239966。同时,需要注意在可运行的线程内部正确调用关闭LED灯的函数。

0