如何使用Flutter获取设备当前连接的接入点MAC地址?
嘿,刚好我对这个问题挺熟悉的,来给你捋清楚:
核心结论:Flutter SDK本身无直接方法
Flutter的跨平台核心API并没有暴露获取接入点MAC地址的功能——毕竟这个属于设备底层的网络硬件信息,得依赖原生平台的能力来实现,所以我们需要借助第三方Flutter插件来搞定。
实现步骤:用插件搞定
目前社区里比较常用的插件是wifi_info_flutter,下面是具体操作流程:
1. 添加插件依赖
在你的pubspec.yaml文件里添加依赖:
dependencies: flutter: sdk: flutter wifi_info_flutter: ^2.0.1 # 建议确认最新版本后使用
然后运行flutter pub get完成依赖安装。
2. 配置平台权限
因为获取网络硬件信息涉及隐私,不同平台需要配置对应的权限:
Android端
在android/app/src/main/AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
⚠️ 重要提醒:从**Android 10(API 29)**开始,出于隐私保护,应用无法获取接入点的真实MAC地址,系统会返回固定占位符02:00:00:00:00:00,这是系统层面的限制,任何插件都绕不开。
iOS端
在ios/Runner/Info.plist中添加定位权限描述(iOS获取WiFi信息必须依赖定位权限):
<key>NSLocationWhenInUseUsageDescription</key> <string>需要获取位置权限以获取WiFi接入点信息</string>
⚠️ 同样要注意:从iOS 14开始,设备默认使用私有MAC地址连接WiFi,你获取到的接入点MAC会是匿名化后的地址,并非真实物理地址,这也是系统隐私政策的强制限制。
3. 编写代码获取MAC地址
导入插件后,就可以调用API获取信息了:
import 'package:wifi_info_flutter/wifi_info_flutter.dart'; Future<String?> getConnectedAPMac() async { try { final wifiInfo = await WifiInfo().getWifiInfo(); return wifiInfo.bssid; // BSSID就是接入点的MAC地址 } catch (e) { print('获取接入点MAC失败:$e'); return null; } }
调用这个方法就能拿到接入点的MAC地址啦,记得提前处理权限申请逻辑(比如在Android和iOS上弹出权限请求弹窗)。
其他可选插件
如果你觉得wifi_info_flutter不符合需求,也可以试试connectivity_plus,不过它主要侧重网络连接状态检测,要获取MAC地址还得结合其他逻辑,不如前者直接。
内容的提问来源于stack exchange,提问作者Alloysius Goh

