所以我试图写的和成功的是频闪仪(闪光灯在某些高频下闪烁)。但问题是,当我启动它时,它可以工作,但是当我再次按下按钮将其关闭时,没有任何反应。
代码块:
protected void onCreate(Bundle savedInstanceState) {
...
// Some code for checking if flashlight availabe and listener for seekbar for getting frequncy
...
// My button listener (but1 - button)
but1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flashOn) {
// turn off flash
turnOffFlash();
} else {
// turn on flash
turnFlashOn();
}
}
});
现在主要的大部分代码,我不认为我可以跳过任何这个
private void getCamera() {
if(cam == null) {
try {
cam = Camera.open();
params = cam.getParameters();
} catch(RuntimeException e) {
Log.e("Camera failed to open", e.getMessage());
}
}
}
private void turnFlashOn() {
if(!flashOn) {
if(cam == null || params == null) {
return;
}else {
if (freq == 0) {
camParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
}
else {
sr = new StroboRunner();
sr.freq = freq;
t = new Thread(sr);
t.start();
strob = true;
return ;
}
}
}
}
private void turnOffFlash() {
if(flashOn){
if(cam == null || params == null) {
return;
}
if(strob){
sr.stopRunning = true;
t = null;
strob = false;
return;
}
else camParams.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
}
cam.setParameters(camParams);
cam.startPreview();
}
private class StroboRunner implements Runnable {
int freq;
boolean stopRunning = false;
@Override
public void run() {
Camera.Parameters paramsOn = cam.getParameters();
Camera.Parameters paramsOff = cam.getParameters();
paramsOn.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
paramsOff.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
try {
while (!stopRunning) {
cam.setParameters(paramsOn);
cam.startPreview();
Thread.sleep(freq);
cam.setParameters(paramsOff);
cam.stopPreview();
Thread.sleep(freq);
}
}
catch(Throwable t) {}
}
}
我不是很高级,所以我不知道我写的20%,因为它只有一半的教程和一半写我自己的代码。
答案 0 :(得分:1)
我没有看到您设置flashOn
的任何地方:
flashOn = true;
您可以点击该按钮,每次都获得!flashOn
。