# Kiosk 模式自动启动配置指南 ## 📋 概述 本项目已配置为在启动时自动启用 Kiosk 模式,无需通过 JS 调用。包括以下功能: - ✅ 自动禁用锁屏 - ✅ 屏幕常亮 - ✅ 全屏沉浸式 - ✅ LockTask 模式(防止退出应用) - ✅ 五指长按 5 秒 + 密码 (9527) 可退出 ## 🛠️ 已完成的配置 ### 1. **自定义 Application 类** - 文件:`app/src/main/java/com/YuyeTech/HeartRate/MyApplication.java` - 功能: - 自动注册 Activity 生命周期监听 - 在 Activity 创建时自动调用 `KioskHelper.disableLockScreen()` - 自动绑定 `KioskManager` ### 2. **AndroidManifest.xml 配置** - 已将 Application 改为 `com.YuyeTech.HeartRate.MyApplication` - 已添加必要权限: ```xml ``` - 已注册 Device Admin Receiver - 已注册开机启动 Receiver ### 3. **KioskHelper 辅助类** - 文件:`app/src/main/java/com/YuyeTech/HeartRate/KioskHelper.java` - 提供静态方法: - `disableLockScreen(Activity)` - 禁用锁屏 - `keepScreenOn(Activity)` - 屏幕常亮 - `enableLockScreen(Activity)` - 恢复锁屏 ### 4. **device_admin.xml** - 文件:`app/src/main/res/xml/device_admin.xml` - 定义 Device Admin 策略 ## 📱 部署步骤 ### 第一步:编译 APK ```bash ./gradlew assembleRelease ``` ### 第二步:设置为 Device Owner(必须) ⚠️ **重要**:只有设置为 Device Owner 后,才能完全禁用锁屏和使用 LockTask 模式。 #### 方法 1:使用 ADB 命令(推荐) 1. 确保设备没有添加 Google 账号(恢复出厂设置) 2. 安装 APK: ```bash adb install app-release.apk ``` 3. 设置为 Device Owner: ```bash adb shell dpm set-device-owner com.YuyeTech.HeartRate/com.ble.mylockview.admin.KioskDeviceAdminReceiver ``` #### 方法 2:使用 NFC 批量配置 1. 准备 NFC 配置文件 2. 在设备初始化时通过 NFC 传输配置 #### 方法 3:使用 QR Code(Android 7.0+) 1. 在设备初始化设置界面,连续点击 6 次欢迎屏幕 2. 扫描包含配置信息的二维码 ### 第三步:验证 Device Owner 状态 ```bash adb shell dumpsys device_policy | grep "Device Owner" ``` 如果显示您的应用包名,说明设置成功。 ## 🎮 运行时行为 ### 正常启动流程 1. 应用启动 → `MyApplication.onCreate()` 执行 2. `PandoraEntry` Activity 创建 3. 自动调用 `KioskHelper.disableLockScreen()` 4. 自动调用 `KioskManager.attach()` 5. 进入 Kiosk 模式 ### 调试模式 vs 生产模式 - **Debug 模式** (`BuildConfig.DEBUG = true`): - 不强制 Device Owner - 允许随时退出 - 日志详细 - **Release 模式** (`BuildConfig.DEBUG = false`): - 必须是 Device Owner 才生效 - 需要五指长按 5 秒 + 密码才能退出 - 日志简化 ## 🚪 退出 Kiosk 模式 ### 用户退出(运维人员) 1. 五指同时按住屏幕 5 秒 2. 弹出密码输入框 3. 输入管理员密码:**9527** 4. 点击"解锁" ### 开发者退出 在 Debug 模式下,可以直接使用 ADB: ```bash adb shell am task lock stop ``` ## 🔧 自定义配置 ### 修改管理员密码 编辑 `myLockView/src/main/java/com/ble/mylockview/admin/KioskManager.java`: ```java private static final String ADMIN_PASSWORD = "您的密码"; ``` ### 修改逃生门触发条件 编辑 `KioskManager.java`: ```java private static final int ADMIN_FINGER_COUNT = 5; // 手指数量 private static final long ADMIN_HOLD_TIME = 5000; // 长按时间(毫秒) ``` ### 禁用开机自启动 在 `AndroidManifest.xml` 中移除或禁用 `BootReceiver`: ```xml ...> ``` ## 🐛 故障排查 ### 问题 1:锁屏仍然出现 **原因**:未设置为 Device Owner **解决**:按照"第二步"设置 Device Owner ### 问题 2:无法设置 Device Owner **错误**:`Not allowed to set the device owner...` **解决**: 1. 恢复出厂设置 2. 移除所有账号(包括 Google 账号) 3. 不要在初始设置中添加账号 4. 重新执行 `dpm set-device-owner` 命令 ### 问题 3:应用卡死无法退出 **解决**: 1. 尝试五指长按 5 秒 + 密码 9527 2. 如果失败,使用 ADB: ```bash adb shell am force-stop com.YuyeTech.HeartRate ``` 3. 或者移除 Device Owner: ```bash adb shell dpm remove-active-admin com.YuyeTech.HeartRate/com.ble.mylockview.admin.KioskDeviceAdminReceiver ``` ### 问题 4:日志显示 "⚠️ 不是 Device Owner" **说明**:应用可以正常运行,但 Kiosk 功能有限 **解决**:如需完整 Kiosk 功能,必须设置为 Device Owner ## 📝 代码集成说明 ### 如果需要在其他地方使用 #### 方式 1:通过 KioskHelper(推荐) ```java // 在任何 Activity 中 public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 禁用锁屏(必须在 setContentView 之前) KioskHelper.disableLockScreen(this); KioskHelper.keepScreenOn(this); setContentView(R.layout.activity_main); } } ``` #### 方式 2:通过 KioskManager ```java // 在 Activity 生命周期中 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); KioskManager.attach(this); } @Override protected void onResume() { super.onResume(); KioskManager.onResume(); } @Override protected void onPause() { super.onPause(); KioskManager.onPause(); } @Override protected void onDestroy() { super.onDestroy(); KioskManager.onDestroy(); } ``` ## 🔒 安全建议 1. **生产环境**: - 将 `ADMIN_PASSWORD` 改为强密码 - 考虑将密码存储在加密的 SharedPreferences 中 - 定期更换管理员密码 2. **发布前检查**: - 确认 `BuildConfig.DEBUG = false` - 测试五指逃生门是否正常工作 - 验证 Device Owner 设置流程 3. **备份方案**: - 保留 ADB 调试通道(至少在测试阶段) - 准备物理按键组合退出方案 - 文档化管理员密码 ## 📞 技术支持 如有问题,请检查日志: ```bash adb logcat | grep -E "KioskManager|MyApplication|KioskHelper" ``` 关键日志标签: - `KioskManager` - Kiosk 核心功能 - `MyApplication` - 应用初始化 - `KioskHelper` - 锁屏控制 - `BootLauncher` - 开机启动 --- **最后更新**:2026-01-22 **版本**:1.0