我在UI上有3个按钮。 On, Off and SOS
(重复间隔闪烁)。如果我按下然后按下关闭按钮,闪光灯将按预期关闭。但是如果我按下SOS(它按预期定时闪烁)然后关闭则拒绝停止闪烁。代码如下:
SOSbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
SOSon = true;
startSOS();
onSOSPress();
} catch (Exception ex) {
throw ex;
}
}
});
void onSOSPress() {
try {
Flashlight flashlight=new Flashlight();
SOSon = true;
flashlight.Flashthread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < System.currentTimeMillis(); i++) {
while (!FlashThreadStop) {
if (FlashOn) {
myParameters.setFlashMode(Parameters.FLASH_MODE_OFF);
try {
myCamera.setParameters(myParameters);
}
catch (Exception ex)
{
//logger.log(Level.SEVERE, "an exception was thrown", ex);
}
myCamera.stopPreview();
FlashOn = false;
} else {
TurnOnFlash();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
flashlight.Flashthread.start();
} catch (Exception ex) {
throw ex;
}
}
和 TurnOff机制如下:
off.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (FlashOn) {
// turn off flash
TurnOffFlash();
}
}
});
private void TurnOffFlash() {
if (FlashOn) {
if (myCamera == null || myParameters == null) {
return;
}
myParameters = myCamera.getParameters();
myParameters.setFlashMode(Parameters.FLASH_MODE_OFF);
myCamera.setParameters(myParameters);
myCamera.stopPreview();
FlashOn = false;
}
}
void endSOS(){
FlashThreadStop=true;
}
void startSOS(){
FlashThreadStop=false;
}
编辑:onSOSPress()方法已更新,以反映正常工作的SOS模式(OFF按钮现在可用)
答案 0 :(得分:0)
您的TurnOffFlash
方法无法很好地覆盖闪光灯闪烁。你没有停止线程,所以它继续来回闪烁。您还需要添加一行来覆盖该部分:
Flashthread.interrupt();
通过这种方式,您可以保持功能关闭闪存,如果线程正在运行SOS模式,您也可以将其停止。
旁注:您未能遵循常见的Java命名法,其中方法和变量以小写字母开头并使用
camelCase
。