# WiFi 检测未显示问题排查指南 ## 🔍 问题现象 进入 app 时,即使 WiFi 未连接,也没有显示提示弹窗。 ## 📋 可能的原因 ### 1. ⚠️ 应用未重新编译(最可能) **原因**:修改了代码但没有重新编译打包,设备上运行的还是旧版本的 APK。 **解决方法**: #### 方法 A:使用 Android Studio ``` 1. Build → Clean Project 2. Build → Rebuild Project 3. Build → Build Bundle(s) / APK(s) → Build APK(s) 4. 找到生成的 APK 文件并安装 ``` #### 方法 B:使用命令行 ```bash cd E:\TPlat\HeartRateProject\bBeng-HeartRate-4.66-pad gradlew clean gradlew assembleDebug adb install -r app\build\outputs\apk\debug\app-debug.apk ``` ### 2. 🚫 之前设置了"不再提示" **原因**:用户之前点击了"不再提示"按钮,设置被保存到 SharedPreferences。 **解决方法**: #### 方法 A:清除应用数据 ```bash adb shell pm clear com.YuyeTech.HeartRate ``` #### 方法 B:删除配置文件 ```bash adb shell run-as com.YuyeTech.HeartRate rm -f /data/data/com.YuyeTech.HeartRate/shared_prefs/kiosk_prefs.xml ``` #### 方法 C:重新安装应用 ```bash adb uninstall com.YuyeTech.HeartRate adb install app-debug.apk ``` ### 3. ✅ WiFi 实际上是连接的 **原因**:设备的 WiFi 实际上是连接状态,所以不显示提示。 **验证方法**: ```bash # 检查 WiFi 状态 adb shell dumpsys wifi | findstr "Wi-Fi is" # 如果显示 "Wi-Fi is enabled",说明 WiFi 是开启的 # 需要手动关闭 WiFi adb shell svc wifi disable ``` ### 4. 🐛 Activity 未正确启动 **原因**:启动的 Activity 不是 `PandoraEntry` 或 `PandoraEntryActivity`。 **验证方法**: ```bash # 检查当前运行的 Activity adb shell dumpsys activity activities | findstr "mResumedActivity" # 应该看到: # mResumedActivity: ...com.YuyeTech.HeartRate/io.dcloud.PandoraEntryActivity... ``` ## 🔧 完整诊断流程 ### 步骤 1:运行诊断脚本 运行项目根目录下的 `诊断WiFi检测问题.bat`: ```bash .\诊断WiFi检测问题.bat ``` 这个脚本会自动执行以下操作: 1. 检查设备连接 2. 检查应用是否安装 3. 清除应用数据(包括"不再提示"设置) 4. 断开 WiFi 5. 启动应用 6. 查看日志输出 ### 步骤 2:分析日志输出 #### ✅ 正常情况(应该看到的日志) ``` 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 未连接对话框已显示(必须连接) ``` #### ❌ 异常情况 1:没有任何日志 ``` (没有任何 MyApplication 或 WifiCheckHelper 的日志) ``` **原因**:代码未编译到 APK 中 **解决**:重新编译打包应用(见上面"应用未重新编译"部分) #### ❌ 异常情况 2:显示"用户已选择不再提示" ``` D WifiCheckHelper: 是否跳过 WiFi 检测: true D WifiCheckHelper: 用户已选择不再提示,跳过 WiFi 检测 ``` **原因**:之前设置了"不再提示" **解决**:清除应用数据(见上面"之前设置了不再提示"部分) #### ❌ 异常情况 3:显示"WiFi 已连接" ``` D WifiCheckHelper: WiFi 连接状态: true D WifiCheckHelper: ✅ WiFi 已连接或 Activity 已结束 ``` **原因**:WiFi 实际上是连接的 **解决**:手动断开 WiFi(见上面"WiFi 实际上是连接的"部分) ### 步骤 3:重新测试 完成修复后,重新测试: ```bash # 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 ``` ## 📱 手动测试步骤 1. **准备环境** - 确保设备已连接 - 确保应用已安装最新版本 2. **断开 WiFi** - 在设备上手动关闭 WiFi - 或使用命令:`adb shell svc wifi disable` 3. **清除应用数据**(可选,如果之前设置过"不再提示") - 设置 → 应用 → HeartRate → 清除数据 - 或使用命令:`adb shell pm clear com.YuyeTech.HeartRate` 4. **启动应用** - 点击应用图标 - 或使用命令:`adb shell am start -n com.YuyeTech.HeartRate/io.dcloud.PandoraEntryActivity` 5. **等待 2-3 秒** - WiFi 检测有 2 秒延迟 6. **观察结果** - 应该看到"WiFi 未连接"对话框 - 对话框有两个按钮:"去设置" 和 "不再提示" ## 🎯 预期行为 ### 正常流程 ``` 应用启动 ↓ 等待 2 秒(延迟检测) ↓ 检测 WiFi 状态 ↓ WiFi 未连接 → 显示对话框 ├─ 点击"去设置" → 跳转到 WiFi 设置 │ ↓ │ 按返回键返回应用 │ ↓ │ 等待 500ms │ ↓ │ 再次检测 WiFi │ ↓ │ 仍未连接 → 再次显示对话框(循环) │ └─ 点击"不再提示" → 保存设置,不再显示 ``` ### 对话框特性 - ✅ 标题:"WiFi 未连接" - ✅ 消息:"检测到设备未连接 WiFi 网络。\n\n请配置 WiFi 后才能继续使用。" - ✅ 不可取消(点击外部无效) - ✅ 两个按钮:"去设置"、"不再提示" ## 📝 代码修改说明 为了更好地诊断问题,我在代码中添加了更多的日志输出: ### WifiCheckHelper.java 修改 ```java // 添加了以下日志点: 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. WiFi 检测方法是否被调用 2. 延迟任务是否正确执行 3. 在哪个 Activity 上进行检测 ## ⚡ 快速解决方案 如果不想看详细说明,直接执行以下命令: ```bash # 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 ``` ## 🆘 仍然无法解决? 如果按照上述步骤仍然无法解决,请提供以下信息: 1. **完整的日志输出** ```bash adb logcat -d > logcat.txt ``` 2. **应用版本信息** ```bash adb shell dumpsys package com.YuyeTech.HeartRate | findstr "versionName" ``` 3. **当前运行的 Activity** ```bash adb shell dumpsys activity activities | findstr "mResumedActivity" ``` 4. **WiFi 状态** ```bash adb shell dumpsys wifi | findstr "Wi-Fi is" ``` 5. **SharedPreferences 内容** ```bash adb shell run-as com.YuyeTech.HeartRate cat /data/data/com.YuyeTech.HeartRate/shared_prefs/kiosk_prefs.xml ```