[英]Flash not being turned off on button press(Flashlight App)
我在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按鈕現在工作)
您的TurnOffFlash
方法不能很好地覆蓋閃光燈閃爍。 你沒有停止線程,所以它繼續來回閃爍。 您還需要添加一行來覆蓋該部分:
Flashthread.interrupt();
這樣你就可以保持你的功能關閉閃存,如果線程正在運行SOS模式,你也會停止它。
旁注:您沒有遵循常見的Java命名法,其中方法和變量以小寫字母開頭並使用
camelCase
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.