Flutter 获取手机连接的Wifi信息

  • 测试版本
    • 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

github地址:https://github.com/fluttercommunity/plus_plugins/tree/main/packages/network_info_plus/network_info_plus

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");

}
相关推荐
江上清风山间明月19 小时前
Flutter开发的应用页面非常多时如何高效管理路由
android·flutter·路由·页面管理·routes·ongenerateroute
Zsnoin能1 天前
flutter国际化、主题配置、视频播放器UI、扫码功能、水波纹问题
flutter
早起的年轻人1 天前
Flutter CupertinoNavigationBar iOS 风格导航栏的组件
flutter·ios
HappyAcmen1 天前
关于Flutter前端面试题及其答案解析
前端·flutter
coooliang2 天前
Flutter 中的单例模式
javascript·flutter·单例模式
coooliang2 天前
Flutter项目中设置安卓启动页
android·flutter
JIngles1232 天前
flutter将utf-8编码的字节序列转换为中英文字符串
java·javascript·flutter
B.-2 天前
在 Flutter 中实现文件读写
开发语言·学习·flutter·android studio·xcode
freflying11192 天前
使用jenkins构建Android+Flutter项目依赖自动升级带来兼容性问题及Jenkins构建速度慢问题解决
android·flutter·jenkins
机器瓦力2 天前
Flutter应用开发:对象存储管理图片
flutter