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

}
相关推荐
西西学代码6 小时前
Flutter---侧边栏
flutter
xmdy58667 小时前
Flutter+开源鸿蒙实战|企业级工具APP Day2 全局网络封装与 Dio 拦截器实战(鸿蒙兼容版)
flutter·开源·harmonyos
xmdy58667 小时前
Flutter+开源鸿蒙实战:企业级工具类APP开发教程(含第三方库适配)
flutter·开源·harmonyos
Swift社区8 小时前
Flutter / React / ArkUI:在鸿蒙 PC 上怎么选?
flutter·react.js·harmonyos
恋猫de小郭9 小时前
Android Studio 放着没怎么用,怎么也会越来越卡?
android·前端·flutter
xmdy58661 天前
Flutter + 开源鸿蒙跨端实战|基于空间地理信息的**城市全域智慧泊车调度与多维运维管理平台** Day1 项目架构基座与工程化环境搭建
flutter·开源·harmonyos
KillerNoBlood1 天前
2026移动端跨平台开发面经总结
android·算法·flutter·ios·移动开发·鸿蒙·kmp
xmdy58661 天前
Flutter+开源鸿蒙全域智慧泊车调度管理平台 Day4 订单全流程闭环+支付核验+会员权益+个人中心开发
flutter·开源·harmonyos
W蘭1 天前
Flutter从入门到实战-01-Dart语言基础
flutter
xuankuxiaoyao1 天前
Vue.js 插槽、作用域插槽、商品、阶段案例
android·vue.js·flutter