使用network_info_plus获取SSID遇异常:Android/iOS均存问题求方案
解决思路
版本一致性处理:
先统一依赖版本,优先使用pub.dev上的稳定版network_info_plus: ^4.1.0,避免使用文档未同步的5.0.0版本。如果想尝试最新代码,可以直接依赖仓库源码:network_info_plus: git: url: https://github.com/fluttercommunity/plus_plugins.git path: packages/network_info_plus依赖后执行
flutter pub get,清理项目缓存(flutter clean)再重新编译。Android端SSID缺失修复:
Android 14获取WiFi SSID需要满足两个核心条件:- 权限配置:在
AndroidManifest.xml中添加必要权限:<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> - 位置服务开启:Android 10+要求必须开启系统位置服务,即使权限已授予,关闭位置服务仍会返回空SSID。可以在代码中判断位置服务状态,引导用户开启。
- 动态权限申请:使用
permission_handler包主动请求Permission.locationWhenInUse权限,确保用户已授权。
- 权限配置:在
iOS端无返回值修复:
iOS 17.2.1下获取WiFi信息需注意:- 权限配置:在
Info.plist中添加位置权限描述:<key>NSLocationWhenInUseUsageDescription</key> <string>需要获取位置权限以获取WiFi信息</string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>需要获取位置权限以获取WiFi信息</string> - 真实设备测试:iOS模拟器无法获取真实WiFi数据,必须使用物理设备测试。
- 精确位置权限:iOS 14+需确保用户授予了精确位置权限,模糊位置权限无法获取WiFi SSID。
- 权限配置:在
替代方案:
如果上述方法仍无效,可以通过Platform Channel实现原生逻辑:- Android端:使用
ConnectivityManager.getActiveNetworkInfo()结合WifiManager.getConnectionInfo()获取SSID。 - iOS端:调用
CNCopyCurrentNetworkInfo(nil)获取当前WiFi信息(需导入SystemConfiguration/CaptiveNetwork.h)。
- Android端:使用
内容的提问来源于stack exchange,提问作者Mauro Miotello
相关产品推荐
相关产品推荐

