From 638f999f672de9a3e2c04d6149be98920a8c7ef9 Mon Sep 17 00:00:00 2001 From: dongliang Date: Tue, 28 Apr 2026 21:26:23 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20NFC=E8=AF=BB=E5=8D=A1=E5=90=8E=E5=85=88?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E5=86=8D=E9=80=80=E5=87=BA=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E5=85=88stopScan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stopScan()会cancel自己所在的协程,导致后面的 withContext(Main){callback}永远执行不到。 改为先回调,再return@launch退出循环。 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../java/com/xiaoqu/watch/device/nfc/FiseNfcController.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/device/nfc/FiseNfcController.kt b/app/src/main/java/com/xiaoqu/watch/device/nfc/FiseNfcController.kt index 05ae884..b4c6e8b 100644 --- a/app/src/main/java/com/xiaoqu/watch/device/nfc/FiseNfcController.kt +++ b/app/src/main/java/com/xiaoqu/watch/device/nfc/FiseNfcController.kt @@ -82,13 +82,12 @@ class FiseNfcController @Inject constructor() : NfcController { // 非空且非全零才算有效卡号(全零=无卡贴近) if (nfcId.isNotEmpty() && nfcId.any { it != '0' }) { - Timber.d("NFC控制: 读到卡号 $nfcId,停止轮询") - // 读到有效卡号后立即停止轮询,避免重复回调 - stopScan() - // 切回主线程回调 + Timber.d("NFC控制: 读到卡号 $nfcId") + // 先回调再退出循环(不能先 stopScan,会 cancel 自己的协程) withContext(Dispatchers.Main) { callback(nfcId) } + // 回调完成后退出轮询,不再读卡 return@launch } }