# 🔐 Kiosk 模式完整功能说明 ## 📋 总览 本项目是一个 **UniApp 离线 Android 应用**,集成了完整的 **Kiosk 模式**功能,包括: - ✅ **自动禁用锁屏**(Device Owner 模式) - ✅ **屏幕保持常亮** - ✅ **LockTask 固定屏幕**(防止切换应用) - ✅ **禁用返回键**(防止退出应用) - ✅ **WiFi 强制检测**(启动时和从设置返回时) - ✅ **开机自启动**(BootReceiver) --- ## 🎯 功能特性 ### 1. Kiosk 锁定模式 ✅ #### 自动初始化 - 应用启动时自动启用 Kiosk 模式 - 禁用锁屏,防止设备进入锁屏状态 - 屏幕保持常亮,永不休眠 - 启用 LockTask,防止用户切换到其他应用 #### 核心组件 | 组件 | 说明 | 位置 | |------|------|------| | `MyApplication.java` | 应用入口,注册生命周期监听 | `app/src/main/java/.../MyApplication.java` | | `KioskHelper.java` | 禁用锁屏和保持屏幕常亮 | `app/src/main/java/.../KioskHelper.java` | | `KioskManager.java` | 管理 LockTask 和系统 UI | `myLockView/src/.../KioskManager.java` | | `KioskDeviceAdminReceiver.java` | Device Admin 接收器 | `myLockView/src/.../KioskDeviceAdminReceiver.java` | #### 日志输出 ``` D MyApplication: Application 初始化 D MyApplication: ✅ 绑定 Kiosk 到: PandoraEntryActivity D KioskHelper: ✅ 锁屏已禁用 D KioskHelper: ✅ 屏幕保持常亮 D KioskManager: ✅ LockTask 启用(一次) ``` --- ### 2. 返回键禁用 ✅ #### 功能说明 - **完全禁用**应用内的返回键 - 防止用户返回到黑屏启动页 - 防止显示"无法取消固定屏幕"提示 - **只允许**从 WiFi 设置页面返回 #### 核心组件 | 组件 | 说明 | 位置 | |------|------|------| | `BackPressHandler.java` | 返回键处理器 | `app/src/main/java/.../BackPressHandler.java` | #### 行为策略 | 场景 | 行为 | Toast 提示 | |------|------|-----------| | 主页面按返回键 | ⛔ 禁用 | "Kiosk 模式已锁定" | | 启动页按返回键 | ⛔ 禁用 | "Kiosk 模式已锁定" | | WiFi 设置按返回键 | ✅ 允许 | 无 | #### 日志输出 ``` D BackPressHandler: 🔙 检测到返回键按下 D BackPressHandler: ⛔ PandoraEntryActivity 按返回键 → 已禁用(Kiosk 模式) ``` --- ### 3. WiFi 强制检测 ✅ #### 功能说明 - 应用启动时检测 WiFi 连接状态 - 未连接时弹出**不可取消**的对话框 - 用户**必须连接 WiFi** 或选择"不再提示" - 从 WiFi 设置返回后自动重新检测 #### 核心组件 | 组件 | 说明 | 位置 | |------|------|------| | `WifiCheckHelper.java` | WiFi 检测和提示 | `app/src/main/java/.../WifiCheckHelper.java` | #### 检测流程 ``` 应用启动 ↓ 延迟 2 秒 ↓ 检测 WiFi 连接 ↓ 未连接 → 显示对话框(不可取消) ↓ 用户点击"去设置" ↓ 跳转到 WiFi 设置 ↓ 用户按返回键 ↓ 延迟 1 秒 ↓ 重新检测 WiFi ↓ 仍未连接 → 再次显示对话框(循环) 已连接 → 检测通过 ✅ ``` #### 日志输出 ``` D WifiCheckHelper: WiFi 连接状态: false D WifiCheckHelper: ⚠️ WiFi 未连接,显示提示对话框(必须连接) D WifiCheckHelper: 用户选择:去设置 D WifiCheckHelper: ⚠️ onResume 时 WiFi 未连接 D WifiCheckHelper: ⚠️ WiFi 仍未连接,显示提示对话框 ``` --- ### 4. 开机自启动 ✅ #### 功能说明 - 设备开机后自动启动应用 - 自动进入 Kiosk 模式 - 支持直接启动(Direct Boot) #### 核心组件 | 组件 | 说明 | 位置 | |------|------|------| | `BootReceiver.java` | 开机广播接收器 | `myLockView/src/.../BootReceiver.java` | #### 日志输出 ``` D BootReceiver: 📱 收到开机广播: android.intent.action.BOOT_COMPLETED D BootReceiver: ✅ 正在启动 Kiosk 应用... D BootReceiver: ✅ Kiosk 应用已启动 ``` --- ## 📁 文件结构 ``` bBeng-HeartRate-4.66-pad/ ├── app/src/main/java/com/YuyeTech/HeartRate/ │ ├── MyApplication.java # ✅ 应用入口,生命周期管理 │ ├── KioskHelper.java # ✅ 禁用锁屏和保持屏幕常亮 │ ├── BackPressHandler.java # ✅ 返回键处理器 │ └── WifiCheckHelper.java # ✅ WiFi 检测和提示 ├── myLockView/src/main/java/com/ble/mylockview/ │ ├── admin/ │ │ ├── KioskManager.java # ✅ Kiosk 管理器 │ │ └── KioskDeviceAdminReceiver.java # ✅ Device Admin 接收器 │ ├── boot/ │ │ └── BootReceiver.java # ✅ 开机启动接收器 │ └── config/ │ └── LaunchConfig.java # ✅ 启动配置 ├── myWIFIView/src/main/java/com/ble/mywifiview/ │ └── WifiModule.java # ✅ WiFi 工具类 ├── 测试返回键功能.bat # 测试脚本 ├── 测试WiFi检测功能.bat # 测试脚本 ├── 安装并配置Kiosk模式.bat # 安装脚本 ├── 返回键功能说明.md # 文档 ├── WiFi检测功能说明.md # 文档 └── Kiosk模式完整功能说明.md # 本文档 ``` --- ## 🚀 快速开始 ### 1. 编译应用 ```bash .\gradlew assembleApp_bbengDebug ``` ### 2. 安装并配置 ```bash .\安装并配置Kiosk模式.bat ``` 这个脚本会自动: - ✅ 安装 APK - ✅ 设置为 Device Owner - ✅ 配置 LockTask 白名单 - ✅ 启动应用 ### 3. 测试功能 #### 测试返回键 ```bash .\测试返回键功能.bat ``` #### 测试 WiFi 检测 ```bash .\测试WiFi检测功能.bat ``` --- ## 📊 完整日志示例 ### 应用启动日志 ``` D MyApplication: Application 初始化 D MyApplication: ✅ 绑定 Kiosk 到: PandoraEntry D KioskHelper: ✅ 锁屏已禁用 D KioskHelper: ✅ 屏幕保持常亮 D KioskManager: ✅ LockTask 启用(一次) D MyApplication: ✅ 返回键拦截器已安装: PandoraEntry D MyApplication: ✅ 绑定 Kiosk 到: PandoraEntryActivity D KioskHelper: ✅ 锁屏已禁用 D KioskHelper: ✅ 屏幕保持常亮 D KioskManager: ✅ LockTask 启用(一次) D MyApplication: ✅ 返回键拦截器已安装: PandoraEntryActivity D WifiCheckHelper: 🔍 开始检测 WiFi 连接... ``` ### WiFi 检测日志(未连接) ``` D WifiCheckHelper: 是否跳过 WiFi 检测: false D WifiCheckHelper: WiFi 连接状态: false D WifiCheckHelper: ⚠️ WiFi 未连接,显示提示对话框(必须连接) D WifiCheckHelper: ✅ WiFi 未连接对话框已显示(必须连接) D WifiCheckHelper: 用户选择:去设置 ``` ### 返回键拦截日志 ``` D BackPressHandler: 🔙 检测到返回键按下 D BackPressHandler: ⛔ PandoraEntryActivity 按返回键 → 已禁用(Kiosk 模式) ``` ### 从 WiFi 设置返回日志 ``` D WifiCheckHelper: ⚠️ onResume 时 WiFi 未连接 D WifiCheckHelper: ⚠️ WiFi 仍未连接,显示提示对话框 D BackPressHandler: 🔙 检测到返回键按下 D BackPressHandler: ✅ 系统设置页面 按返回键 → 允许返回 ``` ### 开机启动日志 ``` D BootReceiver: 📱 收到开机广播: android.intent.action.BOOT_COMPLETED D BootReceiver: 📱 启动 Activity: io.dcloud.PandoraEntry D BootReceiver: ✅ 正在启动 Kiosk 应用... D BootReceiver: ✅ Kiosk 应用已启动 ``` --- ## 🧪 测试清单 ### ✅ Kiosk 锁定功能 - [ ] 应用启动后,屏幕保持常亮 - [ ] 无法下拉通知栏 - [ ] 无法切换到其他应用 - [ ] 锁屏键被禁用 ### ✅ 返回键禁用 - [ ] 在主页面按返回键,显示 "Kiosk 模式已锁定" - [ ] 在启动页按返回键,显示 "Kiosk 模式已锁定" - [ ] 不出现黑屏页面 - [ ] 不显示"无法取消固定屏幕" ### ✅ WiFi 检测 - [ ] 启动时检测 WiFi,未连接则弹出对话框 - [ ] 对话框不可取消(点击外部无效) - [ ] 点击"去设置"可以跳转到 WiFi 设置 - [ ] 从 WiFi 设置返回后自动重新检测 - [ ] 仍未连接则继续弹出对话框 ### ✅ 开机自启动 - [ ] 设备重启后应用自动启动 - [ ] 自动进入 Kiosk 模式 --- ## ⚙️ 配置选项 ### 禁用 WiFi 检测 在 `MyApplication.java` 中注释掉: ```java // WifiCheckHelper.checkWifiOnActivityStart(activity); // WifiCheckHelper.checkWifiOnActivityResume(activity); ``` ### 修改 Toast 提示文本 在 `BackPressHandler.java` 中: ```java showToast(activity, "Kiosk 模式已锁定"); // ← 修改文本 ``` ### 允许退出应用(测试用) 在 `MyApplication.java` 中注释掉: ```java // interceptBackPress(activity); ``` --- ## 🐛 故障排查 ### 问题 1:显示"无法取消固定屏幕" **原因**:返回键未被正确拦截 **解决方案**: 1. 查看日志,确认看到 "已禁用(Kiosk 模式)" 2. 确认 `BackPressHandler` 返回 `true` 3. 重新安装应用 ### 问题 2:WiFi 对话框可以取消 **原因**:`setCancelable(true)` 被误设置 **解决方案**: 在 `WifiCheckHelper.java` 中确认: ```java .setCancelable(false) // ← 必须是 false ``` ### 问题 3:从 WiFi 设置无法返回 **原因**:系统设置页面判断失败 **解决方案**: 查看日志中的 Activity 类名,修改 `isSettingsActivity()` 方法 ### 问题 4:开机不自启动 **原因**:系统厂商限制 **解决方案**: 1. 运行 `设置开机自启动权限.bat` 2. 手动在设备上设置: - 自启动管理:允许 - 电池优化:不优化 - 后台运行:允许 --- ## 📚 相关文档 | 文档 | 说明 | |------|------| | `返回键功能说明.md` | 返回键禁用功能详细说明 | | `WiFi检测功能说明.md` | WiFi 检测功能详细说明 | | `README_BAT脚本使用说明.md` | 所有 BAT 脚本使用指南 | | `Kiosk模式完整功能说明.md` | 本文档(总览) | --- ## 💡 最佳实践 1. **Device Owner 模式** - 必须在设备**恢复出厂设置**后设置 - 使用 `adb shell dpm set-device-owner` 命令 - 确保设备上没有其他账号 2. **测试流程** - 先恢复出厂设置 - 运行 `安装并配置Kiosk模式.bat` - 运行测试脚本验证功能 3. **日志调试** - 使用 `adb logcat -s TAG:D` 过滤日志 - 关键 TAG:`MyApplication`, `KioskHelper`, `KioskManager`, `BackPressHandler`, `WifiCheckHelper`, `BootReceiver` 4. **发布前检查** - ✅ 禁用所有调试日志 - ✅ 移除测试代码 - ✅ 验证所有功能正常 - ✅ 测试开机自启动 --- ## 🎯 总结 ✅ **完整的 Kiosk 模式解决方案**: - 自动禁用锁屏和保持屏幕常亮 - LockTask 固定屏幕,防止切换应用 - 完全禁用返回键,防止退出应用 - WiFi 强制检测,确保网络连接 - 开机自启动,无需人工干预 ✅ **完美解决黑屏问题**: - 不会返回到黑屏启动页 - 不显示"无法取消固定屏幕" - 只允许从 WiFi 设置返回 ✅ **用户体验优化**: - Toast 提示清晰明了 - WiFi 设置返回流畅 - Kiosk 模式稳定可靠