进入 app 时,即使 WiFi 未连接,也没有显示提示弹窗。
原因:修改了代码但没有重新编译打包,设备上运行的还是旧版本的 APK。
解决方法:
1. Build → Clean Project
2. Build → Rebuild Project
3. Build → Build Bundle(s) / APK(s) → Build APK(s)
4. 找到生成的 APK 文件并安装
cd E:\TPlat\HeartRateProject\bBeng-HeartRate-4.66-pad
gradlew clean
gradlew assembleDebug
adb install -r app\build\outputs\apk\debug\app-debug.apk
原因:用户之前点击了"不再提示"按钮,设置被保存到 SharedPreferences。
解决方法:
adb shell pm clear com.YuyeTech.HeartRate
adb shell run-as com.YuyeTech.HeartRate rm -f /data/data/com.YuyeTech.HeartRate/shared_prefs/kiosk_prefs.xml
adb uninstall com.YuyeTech.HeartRate
adb install app-debug.apk
原因:设备的 WiFi 实际上是连接状态,所以不显示提示。
验证方法:
# 检查 WiFi 状态
adb shell dumpsys wifi | findstr "Wi-Fi is"
# 如果显示 "Wi-Fi is enabled",说明 WiFi 是开启的
# 需要手动关闭 WiFi
adb shell svc wifi disable
原因:启动的 Activity 不是 PandoraEntry 或 PandoraEntryActivity。
验证方法:
# 检查当前运行的 Activity
adb shell dumpsys activity activities | findstr "mResumedActivity"
# 应该看到:
# mResumedActivity: ...com.YuyeTech.HeartRate/io.dcloud.PandoraEntryActivity...
运行项目根目录下的 诊断WiFi检测问题.bat:
.\诊断WiFi检测问题.bat
这个脚本会自动执行以下操作:
D MyApplication: Application 初始化
D MyApplication: ✅ 绑定 Kiosk 到: PandoraEntryActivity
D MyApplication: 🔍 开始检测 WiFi 连接: PandoraEntryActivity
D WifiCheckHelper: 📍 checkWifiOnActivityStart 被调用: PandoraEntryActivity
D WifiCheckHelper: 是否跳过 WiFi 检测: false
D WifiCheckHelper: 📍 准备延迟检测 WiFi(2秒后)
D WifiCheckHelper: 📍 延迟检测开始执行
D WifiCheckHelper: WiFi 连接状态: false
D WifiCheckHelper: ⚠️ WiFi 未连接,显示提示对话框(必须连接)
D WifiCheckHelper: ✅ WiFi 未连接对话框已显示(必须连接)
(没有任何 MyApplication 或 WifiCheckHelper 的日志)
原因:代码未编译到 APK 中
解决:重新编译打包应用(见上面"应用未重新编译"部分)
D WifiCheckHelper: 是否跳过 WiFi 检测: true
D WifiCheckHelper: 用户已选择不再提示,跳过 WiFi 检测
原因:之前设置了"不再提示"
解决:清除应用数据(见上面"之前设置了不再提示"部分)
D WifiCheckHelper: WiFi 连接状态: true
D WifiCheckHelper: ✅ WiFi 已连接或 Activity 已结束
原因:WiFi 实际上是连接的
解决:手动断开 WiFi(见上面"WiFi 实际上是连接的"部分)
完成修复后,重新测试:
# 1. 断开 WiFi
adb shell svc wifi disable
# 2. 清除日志
adb logcat -c
# 3. 启动应用
adb shell am start -n com.YuyeTech.HeartRate/io.dcloud.PandoraEntryActivity
# 4. 等待 3 秒
# 5. 查看日志
adb logcat -d -s MyApplication:D WifiCheckHelper:D
准备环境
断开 WiFi
adb shell svc wifi disable清除应用数据(可选,如果之前设置过"不再提示")
adb shell pm clear com.YuyeTech.HeartRate启动应用
adb shell am start -n com.YuyeTech.HeartRate/io.dcloud.PandoraEntryActivity等待 2-3 秒
观察结果
应用启动
↓
等待 2 秒(延迟检测)
↓
检测 WiFi 状态
↓
WiFi 未连接 → 显示对话框
├─ 点击"去设置" → 跳转到 WiFi 设置
│ ↓
│ 按返回键返回应用
│ ↓
│ 等待 500ms
│ ↓
│ 再次检测 WiFi
│ ↓
│ 仍未连接 → 再次显示对话框(循环)
│
└─ 点击"不再提示" → 保存设置,不再显示
为了更好地诊断问题,我在代码中添加了更多的日志输出:
// 添加了以下日志点:
Log.d(TAG, "📍 checkWifiOnActivityStart 被调用: " + activity.getClass().getSimpleName());
Log.d(TAG, "📍 准备延迟检测 WiFi(2秒后)");
Log.d(TAG, "📍 延迟检测开始执行");
Log.d(TAG, "📍 checkWifiOnActivityResume 被调用: " + activity.getClass().getSimpleName());
Log.d(TAG, "📍 onResume 延迟检测开始执行");
这些日志可以帮助我们追踪:
如果不想看详细说明,直接执行以下命令:
# 1. 重新编译(在项目根目录)
gradlew clean assembleDebug
# 2. 重新安装
adb install -r app\build\outputs\apk\debug\app-debug.apk
# 3. 清除应用数据
adb shell pm clear com.YuyeTech.HeartRate
# 4. 断开 WiFi
adb shell svc wifi disable
# 5. 启动应用
adb shell am start -n com.YuyeTech.HeartRate/io.dcloud.PandoraEntryActivity
# 6. 查看日志(等待 3 秒后执行)
adb logcat -d -s MyApplication:D WifiCheckHelper:D
如果按照上述步骤仍然无法解决,请提供以下信息:
完整的日志输出
adb logcat -d > logcat.txt
应用版本信息
adb shell dumpsys package com.YuyeTech.HeartRate | findstr "versionName"
当前运行的 Activity
adb shell dumpsys activity activities | findstr "mResumedActivity"
WiFi 状态
adb shell dumpsys wifi | findstr "Wi-Fi is"
SharedPreferences 内容
adb shell run-as com.YuyeTech.HeartRate cat /data/data/com.YuyeTech.HeartRate/shared_prefs/kiosk_prefs.xml