临时退出期间按键拦截功能说明.md 2.6 KB

临时退出期间按键拦截功能说明

📋 功能描述

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 模式