如何在Flutter中获取当前连接的WiFi SSID?现有插件无法实现
获取当前连接WiFi的SSID(Flutter实现方案)
你提到的connectivity、internet_connection_checker系列插件确实仅能检测网络连接状态,无法获取WiFi的具体信息(如SSID)。下面提供两种可行的实现方案:
方案一:使用connectivity_plus插件
connectivity_plus在基础网络检测之外,也支持获取WiFi的详细信息,只需配置对应权限:
Android 权限配置
在android/app/src/main/AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android 10+ 强制要求 -->
注意:Android 10及以上版本,获取WiFi SSID必须申请位置权限,且用户需开启设备的位置服务。
iOS 权限配置
在ios/Runner/Info.plist中添加权限描述:
<key>NSLocationWhenInUseUsageDescription</key> <string>需要位置权限以获取当前连接的WiFi信息</string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>需要位置权限以获取当前连接的WiFi信息</string>
iOS 13及以上版本同样要求位置权限。
代码实现
import 'package:connectivity_plus/connectivity_plus.dart'; Future<String?> getCurrentWifiSsid() async { final connectivityResult = await Connectivity().checkConnectivity(); if (connectivityResult == ConnectivityResult.wifi) { try { return await Connectivity().getWifiName(); } catch (e) { print('获取WiFi SSID失败: $e'); return null; } } else { print('当前未连接至WiFi网络'); return null; } }
方案二:使用wifi_info_flutter插件
该插件专门用于获取WiFi相关信息,功能更聚焦:
安装依赖
在pubspec.yaml中添加依赖:
dependencies: wifi_info_flutter: ^2.0.1
权限配置
Android和iOS的权限配置与方案一完全一致,此处不再重复。
代码实现
import 'package:wifi_info_flutter/wifi_info_flutter.dart'; Future<String?> getCurrentWifiSsid() async { final wifiInfo = WifiInfo(); try { final ssid = await wifiInfo.getWifiName(); // 部分设备会返回空或"<unknown ssid>",需做判断处理 if (ssid == null || ssid == "<unknown ssid>") { return null; } return ssid; } catch (e) { print('获取WiFi SSID失败: $e'); return null; } }
关键注意事项
- 权限申请:必须主动向用户申请位置权限,可配合
permission_handler插件完成权限请求流程,否则无法获取SSID。 - 平台限制:Android设备未开启位置服务时,即使有权限也可能返回"
";iOS在后台获取WiFi信息需额外配置后台模式。 - 测试建议:优先使用真机测试,模拟器大概率无法正确返回真实的WiFi信息。
内容的提问来源于stack exchange,提问作者Moheb jami
相关产品推荐
相关产品推荐

