求替代过时wifi_info_flutter的插件:实现附近WiFi列表获取与记录
替代过时的wifi_info_flutter:获取附近Wi-Fi SSID及信号强度的方案
一、Flutter插件方案
1. wifi_scan
这是目前维护活跃、功能完整的Wi-Fi扫描插件,支持Android和iOS平台,能直接获取附近Wi-Fi的SSID、信号强度(RSSI)等信息。
- 权限配置:
- Android:需在
AndroidManifest.xml中添加ACCESS_FINE_LOCATION、CHANGE_WIFI_STATE权限;Android 12+还需POST_NOTIFICATIONS权限用于后台扫描。 - iOS:需在
Info.plist中添加NSLocationWhenInUseUsageDescription或NSLocationAlwaysAndWhenInUseUsageDescription(位置权限),以及NSWiFiUsageDescription(Wi-Fi信息访问权限)。
- Android:需在
- 简单使用示例:
先在pubspec.yaml添加依赖:
核心代码:dependencies: wifi_scan: ^0.5.0import 'package:wifi_scan/wifi_scan.dart'; Future<void> fetchWifiList() async { // 请求必要权限 final permissionStatus = await WifiScan.instance.requestPermissions(); if (permissionStatus != PermissionStatus.granted) return; // 启动扫描 final scanSuccess = await WifiScan.instance.startScan(); if (!scanSuccess) return; // 获取扫描结果 final scanResults = await WifiScan.instance.getScanResults(); for (final result in scanResults) { // 提取SSID和信号强度(level单位为dBm,值越小信号越弱) print("SSID: ${result.ssid}, 信号强度: ${result.level} dBm"); // 此处可将结果写入本地数据库或文件完成记录 } }
2. flutter_wifi_connect
虽然主打Wi-Fi连接功能,但也支持扫描附近Wi-Fi列表,可获取所需的SSID与信号强度信息,配置对应权限后即可使用。
3. network_info_plus(注意局限)
属于Flutter官方维护的插件集合,主要用于获取当前已连接的Wi-Fi信息,若仅需扫描附近网络,建议搭配前两个插件使用。
二、原生代码实现(插件无法满足需求时)
Android端
利用系统WifiManager类实现扫描:
- 权限配置同上述插件,Android 10+需动态申请
ACCESS_FINE_LOCATION。 - 核心原生代码示例(Kotlin):
val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { val scanSuccess = wifiManager.startScan() if (scanSuccess) { val scanResults = wifiManager.scanResults for (result in scanResults) { val ssid = result.SSID val signalStrength = result.level // 处理并记录数据 } } }
iOS端
使用CoreWLAN框架实现扫描:
- 需在
Info.plist配置位置权限与Wi-Fi权限,iOS 13+仅允许前台扫描。 - 核心原生代码示例(Swift):
import CoreWLAN let interface = CWInterface() interface.scanForNetworks(withSSID: nil) { networks, error in guard let networks = networks else { return } for network in networks { let ssid = network.ssid ?? "未知SSID" let signalStrength = network.rssiValue // 处理并记录数据 } }
注意事项
- Android 12及以上版本,后台Wi-Fi扫描频率受系统限制,需合理控制扫描间隔。
- iOS平台后台扫描Wi-Fi需要特殊权限,App Store审核通过率极低,建议仅在前台实现扫描功能。
- 所有方案均需确保用户授予对应权限,否则无法获取Wi-Fi数据。
内容的提问来源于stack exchange,提问作者ZZZ iioo
相关产品推荐
相关产品推荐

