- 测试版本
- Flutter:3.7.6
- Dart:2.19.3
- network_info_plus: 4.0.1
前言
我在做设备配网的时候,需要选择配网的WiFi。用下拉选择框展示WiFi列表。现在有个需求:默认展示的设备为手机连接的wifi。要实现这个需求只要能够获取到手机连接的wifi信息即可。
在这里我使用的库是network_info_plus 。这个库适用于Android、iOS、MacOS、Windows。可以获取连接WiFi的名称、BSSID、IPV4、IPV6、网关、广播、子任务
在获取Wifi信息时需要获取设备的定位才能成功,因此我需要使用permission_handler来进行权限申请
pub地址:network_info_plus | Flutter package
Network_info_plus的API
函数 | 描述 | 举例 | 备注 |
---|---|---|---|
getWifiSubmask() |
获取的设备的子网掩码 | 255.255.255.0 |
|
getWifiName() | 获取WiFi的名称 | "FooNetwork" |
经测试发现Android会有双引号,ios没有双引号 |
getWifiIPv6() |
获取Wifi的IPV6 | 2001:0db8:85a3:0000:0000:8a2e:0370:7334 |
|
getWifiIP() |
获取Wifi的IPV4 | 192.168.1.43 |
|
getWifiGatewayIP() |
获取设备的网关地址 | 192.168.1.1 |
|
getWifiBSSID() | 获取WiFi的BSSID | 11:22:33:44:55:66 |
|
getWifiBroadcast(); |
获取设备的广播地址 | 192.168.1.255 |
|
NetworkInfo(); | 初始化Network_info_plus |
使用步骤
1.下载Network_info_plus包
flutter pub add network_info_plus
2.权限配置
Android权限配置
配置要求
- Android 10(API 级别 29)SDK 或更高版本,则您的应用需要具有 ACCESS_FINE_LOCATION 权限
- 低于 Android 10(API 级别 29),则您的应用需要具有 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限
- 设备上启用了位置服务(在"设置">"位置"下)
- 如果您使用 Android 12(API 级别 31)及更高版本的设备,请确保您的应用具有 ACCESS_NETWORK_STATE 权限
- 默认情况下,此包不提供 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 权限
具体配置
1.进入项目根目录/android/app/src/main/AndroidManifest.xml中添加以下权限
<!-- required for API 23 - 30 定位服务权限-->
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.在代码中获取定位权限
var status = await Permission.location.status;
if (!status.isGranted) {
await Permission.location.request();
}
3.验证是否成功
在Flutter中添加如下代码进行测试
getPhoneConnectWifiName() async { var info = NetworkInfo();
String? wifiName = await info.getWifiName();
print("-------------手机连接的wifi名称为:$wifiName");
var status = await Permission.location.status;
if (!status.isGranted) {
await Permission.location.request();
}
wifiName = await info.getWifiName();
print("-------------手机连接的wifi名称为:$wifiName");
}
iOS权限配置
1.下载的证书中应该包含Access Wi-Fi Information
2.打开xcode,点击TARGETS下的项目------>点击Signing&Capablities------>点击All
3.点击加号------>在搜索框中搜索asscicated,然后双击Associated Domains。然后就能看到新增的内容了
3.添加location的权限。进入到项目根目录/ios/Profile文件中,找到PERMISSION_LOCATION,取消注释,并将值改为1。没加的请看Flutter 权限申请,如何对iOS进行配置
4.在Info.plist中添加NSLocationAlwaysAndWhenInUseUsageDescription和NSLocationWhenInUseUsageDescription权限。
展开Runner------>展开Runner------右击Info文件------>点击openAs------>选择Source Code,然后添加如下内容
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>获取用户当前连接的WiFi名称并展示在配网列表中</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>获取用户当前连接的WiFi名称并展示在配网列表中</string>
5.在代码中获取定位权限
var status = await Permission.location.status;
if (!status.isGranted) {
await Permission.location.request();
}
6.验证是否成功
在Flutter中添加如下代码进行测试
getPhoneConnectWifiName() async { var info = NetworkInfo();
String? wifiName = await info.getWifiName();
print("-------------手机连接的wifi名称为:$wifiName");
var status = await Permission.location.status;
if (!status.isGranted) {
await Permission.location.request();
}
wifiName = await info.getWifiName();
print("-------------手机连接的wifi名称为:$wifiName");
}