后续修正:本记录中的异常触发范围已由读卡器重新初始化提示触发范围修正记录收窄;当前规则仅针对成功初始化后的连接异常。
结论:消费页在读卡器设备未找到、USB 权限拒绝、连接断开或致命异常时弹出确认框;用户点击“确定”后释放旧连接并重新执行设备发现、权限确认、连接及协议初始化。
UC-READER-REINIT-001 / Done / READYReaderInitializationRetryGate,集中维护提示框和重试状态,防止异常回调密集到达时重复弹框或重复初始化。ConsumptionActivity 在设备未找到、USB 权限拒绝、断开和读卡器错误回调中展示确认框。ConsumptionCardSearchManager.reinitialize();页面更新为“读卡器初始化中”,并记录 CARD_READER_REINITIALIZE 和 CONSUMPTION_READER_REINITIALIZE 日志。ConsumptionCardSearchManager 串行停止当前会话并断开旧连接,再重新执行设备发现、权限确认和连接;NewcapecUsbCardReader.connect() 内继续调用协议 initialize(),因此属于完整重新初始化。onStop() 和 onDestroy() 同样负责清理提示框。ReaderInitializationRetryGate 尚不存在而编译失败。ReaderInitializationRetryGateTest 4 个测试通过,覆盖重复异常、重复确认、取消后再次提示及恢复后清理。JAVA_HOME=$(/usr/libexec/java_home -v 1.8) bash gradlew :app:testDebugUnitTest --rerun-tasks,199 个测试,0 failure、0 error、0 skipped。JAVA_HOME=$(/usr/libexec/java_home -v 1.8) bash gradlew :app:assembleDebug,构建成功。app/build/outputs/apk/debug/app-debug.apk,大小 67186843 字节,SHA-256 0070e8c4fb8e36d1095a8a9ddca9be529b4721be0832f35ebabe5135f19efa8b。本次未执行暂存、提交、推送、拉取、分支切换或其他 Git 写操作。