我正在尝试制作一个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;
}
}
答案 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;
}
它没有包含在任何函数中,因此很可能它没有在您期望的时候运行。