# WiFi 检测功能说明 ## 🎯 功能概述 应用启动时自动检测 WiFi 连接状态,如果未连接 WiFi,会弹出提示对话框,引导用户去设置 WiFi。 ## ✅ 已实现的功能 ### 1. 自动检测 WiFi 连接 - 在 `PandoraEntryActivity` 启动时自动检测 - 延迟 2 秒执行,避免影响启动速度 - 兼容 Android 6.0+ 和更低版本 ### 2. 强制连接提示对话框 弹出对话框包含两个选项: - **去设置** - 跳转到系统 WiFi 设置页面 - **不再提示** - 保存用户选择,以后不再提示 **重要特性**: - ✅ 对话框不可取消(点击外部无效) - ✅ 从 WiFi 设置返回后自动重新检测 - ✅ 如果仍未连接,继续提示,直到连接成功 - ✅ 必须连接 WiFi 或选择"不再提示"才能继续 ### 3. 用户偏好记忆 - 如果用户选择"不再提示",会保存到 SharedPreferences - 可以通过代码重置设置,允许再次提示 ## 📂 新增文件 ### 1. WifiCheckHelper.java **路径**:`app/src/main/java/com/YuyeTech/HeartRate/WifiCheckHelper.java` **主要方法**: ```java // 检查 WiFi 是否连接 public static boolean isWifiConnected(Context context) // 显示 WiFi 未连接对话框 public static void showWifiNotConnectedDialog(Activity activity) // 检查是否应该跳过 WiFi 检测 public static boolean shouldSkipWifiCheck(Context context) // 重置 WiFi 检测设置 public static void resetWifiCheckSettings(Context context) // 在 Activity 启动时自动检测 WiFi public static void checkWifiOnActivityStart(Activity activity) ``` ### 2. MyApplication.java(已修改) 在 `onActivityCreated()` 中添加了 WiFi 检测: ```java // ✅ 检测 WiFi 连接(仅对 PandoraEntryActivity) if (activity instanceof io.dcloud.PandoraEntryActivity) { Log.d(TAG, "🔍 开始检测 WiFi 连接..."); WifiCheckHelper.checkWifiOnActivityStart(activity); } ``` ## 🔍 工作流程 ``` 应用启动 ↓ PandoraEntryActivity 创建 ↓ 延迟 2 秒 ↓ 检查用户偏好(是否选择了"不再提示") ↓ 如果未跳过 → 检测 WiFi 连接状态 ↓ 如果未连接 WiFi → 显示提示对话框(不可取消) ↓ 用户选择: - 去设置 → 跳转到系统 WiFi 设置 ↓ 从设置返回(Activity onResume 自动触发) ↓ 延迟 500ms 后立即检测(确保 UI 稳定) ↓ 如果仍未连接 → 立即显示对话框(强制,无法逃避)🔁 如果已连接 → 检测通过 ✅ - 不再提示 → 保存偏好,关闭对话框 关键特性: ✅ 每次 onResume 都检测(不管从哪里返回) ✅ 延迟仅 500ms,几乎立即弹出 ✅ 无法通过快速返回逃避检测 ✅ 必须连接 WiFi 或选择"不再提示" ``` ## 🎨 对话框界面 ``` ┌─────────────────────────────────┐ │ WiFi 未连接 │ ├─────────────────────────────────┤ │ │ │ 检测到设备未连接 WiFi 网络。 │ │ │ │ 请配置 WiFi 后才能继续使用。 │ │ │ ├─────────────────────────────────┤ │ [不再提示] [去设置] │ └─────────────────────────────────┘ 注意: - 对话框不可取消(点击外部无效) - 从设置返回后会自动重新检测 - 如果仍未连接,继续提示 ``` ## 🧪 测试方法 ### 方法 1:使用测试脚本(推荐) 双击运行:**测试WiFi检测功能.bat** 脚本会自动: 1. 检查应用安装状态 2. 停止应用 3. 提示断开 WiFi 4. 启动应用 5. 查看相关日志 ### 方法 2:手动测试 1. 在设备上断开 WiFi 连接 2. 启动应用 3. 观察是否弹出提示对话框 4. 测试三个按钮的功能 ### 方法 3:ADB 命令测试 ```bash # 1. 断开 WiFi(需要 root) adb shell svc wifi disable # 2. 启动应用 adb shell am start -n com.YuyeTech.HeartRate/io.dcloud.PandoraEntry # 3. 查看日志 adb logcat | findstr "WifiCheckHelper" # 4. 重新连接 WiFi adb shell svc wifi enable ``` ## 📊 期望的日志输出 ### WiFi 未连接时 ``` D WifiCheckHelper: 是否跳过 WiFi 检测: false D WifiCheckHelper: WiFi 连接状态: false D WifiCheckHelper: ⚠️ WiFi 未连接,显示提示对话框(必须连接) D WifiCheckHelper: ✅ WiFi 未连接对话框已显示(必须连接) D WifiCheckHelper: 用户选择:去设置 ``` ### 从设置返回后仍未连接(持续检测) ``` D MyApplication: 📱 PandoraEntryActivity onResume → 开始 WiFi 检测 D WifiCheckHelper: ⚠️ onResume 时 WiFi 未连接 D WifiCheckHelper: 📌 已标记需要重新检测 WiFi(onResume 时触发) ... 500ms 后 ... D WifiCheckHelper: ⚠️ WiFi 仍未连接,显示提示对话框(强制) D WifiCheckHelper: ✅ WiFi 未连接对话框已显示(必须连接) ``` ### 从设置返回后已连接 ``` D WifiCheckHelper: ✅ onResume 时 WiFi 已连接 ``` ### WiFi 已连接时 ``` D WifiCheckHelper: 是否跳过 WiFi 检测: false D WifiCheckHelper: WiFi 连接状态: true D WifiCheckHelper: ✅ WiFi 已连接或 Activity 已结束 ``` ### 用户选择"不再提示"后 ``` D WifiCheckHelper: 是否跳过 WiFi 检测: true D WifiCheckHelper: 用户已选择不再提示,跳过 WiFi 检测 ``` ## 🔧 自定义配置 ### 修改延迟时间 在 `WifiCheckHelper.java` 中修改: ```java activity.getWindow().getDecorView().postDelayed(() -> { // ... }, 2000); // ← 修改这里的延迟时间(毫秒) ``` ### 修改对话框文本 在 `WifiCheckHelper.java` 的 `showWifiNotConnectedDialog()` 方法中修改: ```java .setTitle("WiFi 未连接") // ← 标题 .setMessage("检测到设备未连接 WiFi 网络。\n\n是否现在配置 WiFi?") // ← 消息 ``` ### 修改按钮文本 ```java .setPositiveButton("去设置", ...) // ← 主按钮 .setNegativeButton("不再提示", ...) // ← 取消按钮 ``` ### 修改对话框可取消性 ```java .setCancelable(false) // ← false = 不可取消,true = 可取消 ``` ### 修改重新检测延迟时间 ```java // 在 checkWifiOnActivityResume() 中 activity.getWindow().getDecorView().postDelayed(() -> { // ... }, 500); // ← 修改这里的延迟时间(毫秒) // 推荐 500ms,太短可能导致 UI 不稳定,太长用户可能逃避检测 ``` ### 禁用持续检测(不推荐) 在 `MyApplication.java` 中注释掉: ```java // WifiCheckHelper.checkWifiOnActivityResume(activity); ``` ### 重置用户偏好 如果需要让用户重新看到提示,可以调用: ```java WifiCheckHelper.resetWifiCheckSettings(context); ``` 或通过 ADB 清除: ```bash adb shell pm clear com.YuyeTech.HeartRate ``` ## 🎯 使用场景 ### 场景 1:首次启动 - 用户首次安装应用 - 如果未连接 WiFi,会提示配置 - 用户可以选择立即配置或稍后 ### 场景 2:开机自启动 - 设备重启后应用自动启动 - 如果 WiFi 未自动连接,会提示用户 - 方便用户快速配置网络 ### 场景 3:网络断开后重启应用 - WiFi 断开后重新启动应用 - 自动检测并提示用户重新连接 ### 场景 4:用户选择不再提示 - 某些场景下不需要 WiFi(如离线使用) - 用户可以选择"不再提示" - 应用不会再弹出 WiFi 检测对话框 ## ⚠️ 注意事项 ### 1. 权限要求 应用需要以下权限(已在 AndroidManifest.xml 中声明): - `ACCESS_NETWORK_STATE` - 检测网络状态 - `ACCESS_WIFI_STATE` - 检测 WiFi 状态 ### 2. 检测时机 - 只在 `PandoraEntryActivity` 启动时检测 - 不在 `PandoraEntry` 启动时检测(避免重复) - 延迟 2 秒执行,避免影响启动速度 ### 3. 用户体验 - 对话框可以取消(点击外部或按返回键) - 提供"不再提示"选项,尊重用户选择 - 跳转到系统设置,而不是自定义 WiFi 配置界面 ### 4. Kiosk 模式兼容 - WiFi 检测不影响 Kiosk 模式 - 对话框可以在 LockTask 模式下显示 - 用户可以从 WiFi 设置返回应用 ## 🔄 与现有功能的集成 ### 1. 与 Kiosk 模式集成 - WiFi 检测在 Kiosk 初始化之后执行 - 不影响锁屏禁用、屏幕常亮等功能 - 对话框可以在全屏模式下正常显示 ### 2. 与开机自启动集成 - 开机后应用自动启动 - 如果 WiFi 未自动连接,会提示用户 - 用户可以快速配置网络 ### 3. 与 WifiModule 集成 - 使用 `WifiModule.openWifiSettings()` 跳转设置 - 可以扩展为使用 `WifiModule.showWifiDialogView()` 显示自定义 WiFi 列表 ## 💡 扩展建议 ### 1. 使用自定义 WiFi 配置界面 如果想使用应用内的 WiFi 配置界面,可以修改: ```java .setPositiveButton("去设置", (dialog, which) -> { // 使用自定义 WiFi 配置界面 WifiModule.showWifiDialogView(activity, new WifiCallback() { @Override public void onConnecting() { Log.d(TAG, "正在连接 WiFi..."); } @Override public void onConnected() { Log.d(TAG, "WiFi 连接成功"); } @Override public void onFailed(String reason) { Log.e(TAG, "WiFi 连接失败: " + reason); } @Override public void onDisconnected() { Log.d(TAG, "WiFi 已断开"); } }); }) ``` ### 2. 定期检测 WiFi 状态 可以添加定时检测功能: ```java // 在 MyApplication 中添加 private Handler wifiCheckHandler = new Handler(); private Runnable wifiCheckRunnable = new Runnable() { @Override public void run() { // 检测 WiFi 状态 wifiCheckHandler.postDelayed(this, 60000); // 每分钟检测一次 } }; ``` ### 3. 网络状态监听 可以监听网络状态变化: ```java ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onLost(Network network) { // WiFi 断开时提示 } }; ``` ## 📝 更新日志 **2026-01-23** - ✅ 创建 `WifiCheckHelper.java` - ✅ 集成到 `MyApplication.java` - ✅ 添加用户偏好记忆功能 - ✅ 创建测试脚本和文档 --- **创建时间**:2026-01-23 **功能版本**:1.0 **兼容版本**:Android 6.0+