From ab37e39565391fa45a5f7a602f6fed4f88d266d3 Mon Sep 17 00:00:00 2001 From: tanjianbin <632190820@qq.com> Date: Wed, 15 Apr 2026 11:21:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=AD=89=E5=BE=85=E8=B6=85=E6=97=B6=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在机器人开始移动时取消超时计时,在到达接待点或检测到人时启动15分钟超时 超时后自动取消任务并返回充电,避免任务卡死 --- .../lzwcai_terminal_temi/MainActivity.kt | 3 +++ .../lzwcai_terminal_temi/TaskController.kt | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/app/src/main/java/com/example/lzwcai_terminal_temi/MainActivity.kt b/app/src/main/java/com/example/lzwcai_terminal_temi/MainActivity.kt index 0208ac0..5d48b74 100644 --- a/app/src/main/java/com/example/lzwcai_terminal_temi/MainActivity.kt +++ b/app/src/main/java/com/example/lzwcai_terminal_temi/MainActivity.kt @@ -334,12 +334,14 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG val isMoving = normalized in setOf("start", "starting", "going", "moving", "navigating", "calculating", "recalculating") if (isMoving) { cancelAutoRecharge("movement_started:$location/$status") + taskController.cancelTaskWaitTimeout() } if (normalized != "complete" && !isAbort) { return } if (isAbort) { cancelAutoRecharge("movement_aborted:$location/$status") + taskController.cancelTaskWaitTimeout() taskController.clearLeavingHomeBase() taskController.endNonSpecialTask("goTo aborted: $location, status=$status") return @@ -362,6 +364,7 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG location.equals(taskController.getReceptionLocation(), ignoreCase = true) ) { captureReceptionAnchorYawIfNeeded() + taskController.startTaskWaitTimeout() } if (taskController.currentTask != "reception") { receptionAnchorYaw = null diff --git a/app/src/main/java/com/example/lzwcai_terminal_temi/TaskController.kt b/app/src/main/java/com/example/lzwcai_terminal_temi/TaskController.kt index e0f3d14..ed17fa1 100644 --- a/app/src/main/java/com/example/lzwcai_terminal_temi/TaskController.kt +++ b/app/src/main/java/com/example/lzwcai_terminal_temi/TaskController.kt @@ -33,6 +33,24 @@ class TaskController( private var patrolWaitingSeconds: Int = 3 private var patrolNonStop: Boolean = false private var patrolMoveJob: Job? = null + private var taskWaitTimeoutJob: Job? = null + + fun startTaskWaitTimeout() { + taskWaitTimeoutJob?.cancel() + taskWaitTimeoutJob = scope.launch { + delay(15 * 60 * 1000L) // 15 minutes + if (currentTask.isNotEmpty()) { + speak("任务超时了,任务被取消,我先回充电桩了") + setCurrentTask("") + navController.recharge() + } + } + } + + fun cancelTaskWaitTimeout() { + taskWaitTimeoutJob?.cancel() + taskWaitTimeoutJob = null + } fun restoreState( task: String, @@ -65,6 +83,7 @@ class TaskController( if (currentTask == finalTask) { return } + cancelTaskWaitTimeout() currentTask = finalTask if (finalTask == "patrol") { setEmoji(AnimatedEmojiView.Expression.ANGRY) @@ -109,6 +128,8 @@ class TaskController( setReceptionButtonVisible(false) if (getLastArrivalLocation() != location) { navController.goTo(location, false) + } else { + startTaskWaitTimeout() } } @@ -161,6 +182,7 @@ class TaskController( ) { when (state) { DETECTED -> { + startTaskWaitTimeout() if (!isReceptionPromptVisible) { isReceptionPromptVisible = true setReceptionButtonVisible(true)