根据需求,确保进入锁定app时,无论是正常启动还是开机自启动,都必须检测WiFi连接状态,并且必须连接WiFi才能继续使用。
app/src/main/java/com/YuyeTech/HeartRate/MyApplication.java修改前:
// ✅ 检测 WiFi 连接(仅对 PandoraEntryActivity)
if (activity instanceof io.dcloud.PandoraEntryActivity) {
Log.d(TAG, "🔍 开始检测 WiFi 连接...");
WifiCheckHelper.checkWifiOnActivityStart(activity);
}
修改后:
// ✅ 检测 WiFi 连接(对所有主 Activity 都检测,包括 PandoraEntry 和 PandoraEntryActivity)
Log.d(TAG, "🔍 开始检测 WiFi 连接: " + activity.getClass().getSimpleName());
WifiCheckHelper.checkWifiOnActivityStart(activity);
修改前:
// ✅ 在 onResume 时检测 WiFi(每次恢复都检测,包括从设置返回)
if (activity instanceof io.dcloud.PandoraEntryActivity) {
Log.d(TAG, "📱 PandoraEntryActivity onResume → 开始 WiFi 检测");
WifiCheckHelper.checkWifiOnActivityResume(activity);
}
修改后:
// ✅ 在 onResume 时检测 WiFi(每次恢复都检测,包括从设置返回、开机启动等所有情况)
Log.d(TAG, "📱 " + activity.getClass().getSimpleName() + " onResume → 开始 WiFi 检测");
WifiCheckHelper.checkWifiOnActivityResume(activity);
现在 WiFi 检测会在以下所有情况下触发:
| 启动方式 | 触发的 Activity | WiFi 检测时机 |
|---|---|---|
| 用户点击图标启动 | PandoraEntry → PandoraEntryActivity | onCreate + onResume |
| 开机自启动 | PandoraEntryActivity(直接启动) | onCreate + onResume |
| 从其他应用返回 | PandoraEntry 或 PandoraEntryActivity | onResume |
| 从WiFi设置返回 | PandoraEntry 或 PandoraEntryActivity | onResume |
Activity 启动/恢复
↓
检测 WiFi 连接状态
↓
未连接 → 显示强制对话框(不可取消)
↓
用户选择:
├─ "去设置" → 跳转到 WiFi 设置
│ ↓
│ 用户返回(按返回键)
│ ↓
│ onResume 触发
│ ↓
│ 重新检测 WiFi
│ ↓
│ ├─ 仍未连接 → 再次显示对话框(循环)
│ └─ 已连接 → 检测通过 ✅
│
└─ "不再提示" → 保存用户选择,以后不再提示
设备开机
↓
BootReceiver 接收广播
↓
BootLauncher 启动 StartService
↓
StartService 启动 PandoraEntryActivity
↓
MyApplication.onActivityCreated() 触发
↓
├─ 绑定 Kiosk 模式
├─ 禁用锁屏
├─ 屏幕常亮
├─ 拦截返回键
└─ ✅ 检测 WiFi 连接(延迟 2 秒)
↓
MyApplication.onActivityResumed() 触发
↓
└─ ✅ 再次检测 WiFi 连接(500ms 延迟)
↓
未连接 → 显示强制对话框
已连接 → 正常使用 ✅
D MyApplication: Application 初始化
D MyApplication: ✅ 绑定 Kiosk 到: PandoraEntryActivity
D MyApplication: 🔍 开始检测 WiFi 连接: PandoraEntryActivity
D WifiCheckHelper: WiFi 连接状态: true
D WifiCheckHelper: ✅ WiFi 已连接或 Activity 已结束
D MyApplication: 📱 PandoraEntryActivity onResume → 开始 WiFi 检测
D WifiCheckHelper: ✅ onResume 时 WiFi 已连接
D BootReceiver: 收到启动广播:android.intent.action.BOOT_COMPLETED
D BootLauncher: 准备启动 StartService...
D StartService: onStartCommand: Service started.
D StartService: Launching activity from LaunchConfig: io.dcloud.PandoraEntryActivity
D MyApplication: ✅ 绑定 Kiosk 到: PandoraEntryActivity
D MyApplication: 🔍 开始检测 WiFi 连接: PandoraEntryActivity
D WifiCheckHelper: WiFi 连接状态: false
D WifiCheckHelper: ⚠️ WiFi 未连接,显示提示对话框(必须连接)
D WifiCheckHelper: ✅ WiFi 未连接对话框已显示(必须连接)
D MyApplication: 📱 PandoraEntryActivity onResume → 开始 WiFi 检测
D WifiCheckHelper: ⚠️ onResume 时 WiFi 未连接
D WifiCheckHelper: 用户选择:去设置
D WifiCheckHelper: 📌 已标记需要重新检测 WiFi(onResume 时触发)
D MyApplication: 📱 PandoraEntryActivity onResume → 开始 WiFi 检测
D WifiCheckHelper: ⚠️ onResume 时 WiFi 未连接
D WifiCheckHelper: ⚠️ WiFi 仍未连接,显示提示对话框(强制)
D WifiCheckHelper: 用户选择:去设置
D WifiCheckHelper: 📌 已标记需要重新检测 WiFi(onResume 时触发)
D MyApplication: 📱 PandoraEntryActivity onResume → 开始 WiFi 检测
D WifiCheckHelper: ✅ onResume 时 WiFi 已连接
onCreate 阶段(延迟 2 秒)
onResume 阶段(延迟 500ms)
PandoraEntry(启动页)
PandoraEntryActivity(主页面)
# 断开 WiFi
adb shell svc wifi disable
# 模拟开机广播
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p com.YuyeTech.HeartRate
# 查看日志
adb logcat | findstr "WiFi\|MyApplication\|BootReceiver"
# 断开 WiFi
adb shell svc wifi disable
# 重启设备
adb reboot
# 设备重启后查看日志
adb logcat | findstr "WiFi\|MyApplication\|BootReceiver"
# 断开 WiFi
adb shell svc wifi disable
# 启动应用
adb shell am start -n com.YuyeTech.HeartRate/io.dcloud.PandoraEntry
# 查看日志
adb logcat | findstr "WiFi\|MyApplication"
| 文件 | 说明 |
|---|---|
MyApplication.java |
应用入口,注册生命周期监听,触发 WiFi 检测 |
WifiCheckHelper.java |
WiFi 检测工具类,提供检测和对话框功能 |
BootReceiver.java |
开机广播接收器 |
BootLauncher.java |
开机启动调度器 |
StartService.java |
开机启动服务,负责启动 Activity |
LaunchConfig.java |
启动配置,指定启动哪个 Activity |
现在应用已经实现了全方位的 WiFi 强制连接检测:
✅ 所有启动方式都检测:正常启动、开机自启动、从其他应用返回
✅ 所有主 Activity 都检测:PandoraEntry、PandoraEntryActivity
✅ 所有生命周期都检测:onCreate、onResume
✅ 强制连接机制:不可取消对话框 + 循环检测
✅ 用户友好:提供"不再提示"选项
✅ 开机自启动集成:开机后自动启动并检测 WiFi
用户体验:无论用户如何启动应用(包括开机自启动),都会确保 WiFi 连接,保证应用正常运行。