# 临时退出期间按键拦截功能说明 ## 📋 功能描述 在 `app-info.vue` 中下载解除锁定后,限制 HOME 键和任务键,避免用户回到或退出软件。 ## ✅ 实现方案 ### 核心思路 当临时退出 Kiosk 模式(用于安装 APK)时,仍然保持对 HOME 键和任务键的拦截能力。如果用户按下这些按键,会立即尝试恢复 LockTask 模式。 ### 实现细节 #### 1. KioskManager.java(核心逻辑) **新增标志:** - `interceptKeysDuringTemporaryExit`: 标记是否在临时退出期间需要拦截按键 **新增方法:** - `enableKeyInterceptDuringTemporaryExit()`: 启用临时退出期间的按键拦截 - `disableKeyInterceptDuringTemporaryExit()`: 禁用临时退出期间的按键拦截 **修改方法:** - `interceptKey()`: 在检测到 HOME 键或任务键时,如果处于临时退出期间,会尝试恢复 LockTask - `resumeKiosk()`: 恢复 Kiosk 时自动禁用按键拦截标志 #### 2. KioskModule.java(uni-app 桥接层) **修改方法:** - `temporaryExitKiosk()`: 临时退出时自动启用按键拦截 #### 3. app-info.vue(无需修改) 由于逻辑已封装在原生层,Vue 层无需修改。流程如下: 1. 调用 `temporaryExitKiosk()` → 退出 LockTask + 启用按键拦截 2. 安装 APK 3. 调用 `resumeKiosk()` → 恢复 LockTask + 禁用按键拦截 ## 🔄 工作流程 ``` 用户点击下载/安装 ↓ temporaryExitKiosk() ├─ 退出 LockTask 模式 └─ 启用按键拦截标志 ✅ ↓ 安装 APK(用户可能按下 HOME/任务键) ↓ interceptKey() 检测到按键 ├─ 拦截按键事件 └─ 尝试恢复 LockTask(延迟 100ms) ↓ 安装完成/失败 ↓ resumeKiosk() ├─ 禁用按键拦截标志 ✅ └─ 恢复 LockTask 模式 ``` ## 🎯 效果 - ✅ 临时退出期间,HOME 键和任务键被拦截 - ✅ 按下这些按键时,会尝试立即恢复 LockTask 模式 - ✅ 避免用户在安装过程中退出应用 - ✅ 安装完成后自动恢复正常 Kiosk 模式 ## 📝 注意事项 1. **延迟恢复**: 在 `interceptKey` 中使用 100ms 延迟,避免与安装流程冲突 2. **条件检查**: 只有在 `interceptKeysDuringTemporaryExit` 为 true 且未启动 LockTask 时才尝试恢复 3. **自动清理**: `resumeKiosk` 会自动禁用按键拦截标志,确保状态正确 ## 🧪 测试要点 1. ✅ 在下载解除锁定后,按下 HOME 键应该被拦截 2. ✅ 在下载解除锁定后,按下任务键应该被拦截 3. ✅ 安装完成后,应该自动恢复 Kiosk 模式 4. ✅ 安装失败后,也应该恢复 Kiosk 模式