WiFi检测未显示问题排查.md 7.4 KB

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:使用命令行

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:清除应用数据

adb shell pm clear com.YuyeTech.HeartRate

方法 B:删除配置文件

adb shell run-as com.YuyeTech.HeartRate rm -f /data/data/com.YuyeTech.HeartRate/shared_prefs/kiosk_prefs.xml

方法 C:重新安装应用

adb uninstall com.YuyeTech.HeartRate
adb install app-debug.apk

3. ✅ WiFi 实际上是连接的

原因:设备的 WiFi 实际上是连接状态,所以不显示提示。

验证方法

# 检查 WiFi 状态
adb shell dumpsys wifi | findstr "Wi-Fi is"

# 如果显示 "Wi-Fi is enabled",说明 WiFi 是开启的
# 需要手动关闭 WiFi
adb shell svc wifi disable

4. 🐛 Activity 未正确启动

原因:启动的 Activity 不是 PandoraEntryPandoraEntryActivity

验证方法

# 检查当前运行的 Activity
adb shell dumpsys activity activities | findstr "mResumedActivity"

# 应该看到:
# mResumedActivity: ...com.YuyeTech.HeartRate/io.dcloud.PandoraEntryActivity...

🔧 完整诊断流程

步骤 1:运行诊断脚本

运行项目根目录下的 诊断WiFi检测问题.bat

.\诊断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:重新测试

完成修复后,重新测试:

# 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 修改

// 添加了以下日志点:
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 上进行检测

⚡ 快速解决方案

如果不想看详细说明,直接执行以下命令:

# 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. 完整的日志输出

    adb logcat -d > logcat.txt
    
  2. 应用版本信息

    adb shell dumpsys package com.YuyeTech.HeartRate | findstr "versionName"
    
  3. 当前运行的 Activity

    adb shell dumpsys activity activities | findstr "mResumedActivity"
    
  4. WiFi 状态

    adb shell dumpsys wifi | findstr "Wi-Fi is"
    
  5. SharedPreferences 内容

    adb shell run-as com.YuyeTech.HeartRate cat /data/data/com.YuyeTech.HeartRate/shared_prefs/kiosk_prefs.xml