java - 条件为真一段时间后调用方法
问题描述
我想创建一个方法,如果state_i = 1
为time
秒,则调用 method alert_box()
,其中 time 是以前用户选择的值,以秒为单位。
我不确定是否应该使用handler.postDelayed
计时器或 while 循环来实现此方法或可能的其他方法?
目的是在用户闭上眼睛一定时间后显示一个警告框。
谢谢
眼动追踪法
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");
}
}
推荐阅读
- python - 预训练的 CNN (MobileNet V2) 输出形状
- java - Apache Spark 无法加载
- pentaho - 在作业的下一次转换中使用元数据注入
- javascript - 整数 N 的总和 - JavaScript
- typescript - 在剧作家中启动 chrome 被关闭
- powerbi - 如何返回列的 UPPER?
- java - rx.Observable onErrorResumeNext 和 onExceptionResumeNext 有什么区别
- python - 访问 dd/mm/yy 来计算每年的总销售额?
- javascript - 如何在列表中搜索重复项(javascript)?
- python - 使用 fork-execv 从 C 调用 Python 的语法错误