当条件为真一段时间后调用方法
Call method when condition is true for certain length of time
我想创建一个方法,如果 state_i = 1
持续 time
秒,调用方法 alert_box()
,其中时间是之前用户选择的值(以秒为单位)。
我不确定我是否应该使用 handler.postDelayed
或计时器或 while 循环来实现此方法或其他方法?
目的是在用户闭眼一段时间后显示一个警告框。
谢谢
eye_tracking方法
private void eye_tracking(Face face) {
float l = face.getIsLeftEyeOpenProbability();
float r = face.getIsRightEyeOpenProbability();
if (l > THRESHOLD || r > THRESHOLD) {
state_i = 0;
Log.i(TAG, "onUpdate: Open Eyes Detected");
} else {
state_i = 1;
Log.i(TAG, "onUpdate: Closed Eyes Detected");
//If state_i = 1 for *time* seconds, call method alert_box();
}
由于 eye_tracking()
被连续调用,我们可以利用它来发挥我们的优势。我们将存储最后一次眼睛切换状态(即打开和现在关闭)的时间。然后在 eye_tracking()
中,我们将在每次看到闭眼时检查时间是否已过去 1000 毫秒,在这种情况下,然后我们可以调用我们的函数。每当眼睛睁开时,我们将在它们闭上后再次开始循环。
示例代码:
boolean firstTime = true;
long lastLowToHighState = 0;
private void eye_tracking(Face face) {
float l = face.getIsLeftEyeOpenProbability();
float r = face.getIsRightEyeOpenProbability();
if (l > THRESHOLD || r > THRESHOLD) {
state_i = 0;
firstTime = true;
Log.i(TAG, "onUpdate: Open Eyes Detected");
} else {
if (state_i == 0) {
lastLowToHighState = SystemClock.elapsedRealtime();
} else if (firstTime && SystemClock.elapsedRealtime() - lastLowToHighState > 1000) {
// Used to prevent the function from continously firing
lastLowToHighState = SystemClock.elapsedRealtime();
firstTime = false;
// Call Your Method Here
}
state_i = 1;
Log.i(TAG, "onUpdate: Closed Eyes Detected");
}
}
我想创建一个方法,如果 state_i = 1
持续 time
秒,调用方法 alert_box()
,其中时间是之前用户选择的值(以秒为单位)。
我不确定我是否应该使用 handler.postDelayed
或计时器或 while 循环来实现此方法或其他方法?
目的是在用户闭眼一段时间后显示一个警告框。
谢谢
eye_tracking方法
private void eye_tracking(Face face) {
float l = face.getIsLeftEyeOpenProbability();
float r = face.getIsRightEyeOpenProbability();
if (l > THRESHOLD || r > THRESHOLD) {
state_i = 0;
Log.i(TAG, "onUpdate: Open Eyes Detected");
} else {
state_i = 1;
Log.i(TAG, "onUpdate: Closed Eyes Detected");
//If state_i = 1 for *time* seconds, call method alert_box();
}
由于 eye_tracking()
被连续调用,我们可以利用它来发挥我们的优势。我们将存储最后一次眼睛切换状态(即打开和现在关闭)的时间。然后在 eye_tracking()
中,我们将在每次看到闭眼时检查时间是否已过去 1000 毫秒,在这种情况下,然后我们可以调用我们的函数。每当眼睛睁开时,我们将在它们闭上后再次开始循环。
示例代码:
boolean firstTime = true;
long lastLowToHighState = 0;
private void eye_tracking(Face face) {
float l = face.getIsLeftEyeOpenProbability();
float r = face.getIsRightEyeOpenProbability();
if (l > THRESHOLD || r > THRESHOLD) {
state_i = 0;
firstTime = true;
Log.i(TAG, "onUpdate: Open Eyes Detected");
} else {
if (state_i == 0) {
lastLowToHighState = SystemClock.elapsedRealtime();
} else if (firstTime && SystemClock.elapsedRealtime() - lastLowToHighState > 1000) {
// Used to prevent the function from continously firing
lastLowToHighState = SystemClock.elapsedRealtime();
firstTime = false;
// Call Your Method Here
}
state_i = 1;
Log.i(TAG, "onUpdate: Closed Eyes Detected");
}
}