当前位置: 首页 > news >正文

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

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 秋分之际,又搭建了一款微信记账本小程序
  • Java后端开发中的响应缓存:从HTTP缓存到分布式缓存的最佳实践
  • java日志框架之JUL(Logging)
  • 综合体第三题(DHCP报文分析)
  • [51单片机] 简单介绍 (一)
  • 《数据压缩入门》笔记-Part 2
  • 基于Vue3组件封装的技巧分享
  • 手撕Transformer之Embedding Layer
  • Python Web 与物联网(IoT)集成与实时数据处理
  • 手写SpringMVC(简易版)
  • 【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
  • 【学习笔记】手写 Tomcat 四
  • Python多语言语种识别:检测文本是否中英文
  • 如何使用Postman搞定带有token认证的接口实战!
  • vue3 + elementplus + sortablejs实现树形表格拖拽排序
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Django 博客开发教程 8 - 博客文章详情页
  • Hibernate【inverse和cascade属性】知识要点
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java|序列化异常StreamCorruptedException的解决方法
  • Laravel 菜鸟晋级之路
  • Spring Boot快速入门(一):Hello Spring Boot
  • text-decoration与color属性
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 聚类分析——Kmeans
  • 入口文件开始,分析Vue源码实现
  • 译自由幺半群
  • 怎么把视频里的音乐提取出来
  • 追踪解析 FutureTask 源码
  • 走向全栈之MongoDB的使用
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​比特币大跌的 2 个原因
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #Linux(帮助手册)
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (javascript)再说document.body.scrollTop的使用问题
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (九十四)函数和二维数组
  • (七)Java对象在Hibernate持久化层的状态
  • (四)鸿鹄云架构一服务注册中心
  • (四)库存超卖案例实战——优化redis分布式锁
  • (四)模仿学习-完成后台管理页面查询
  • (一)Neo4j下载安装以及初次使用
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)3D模板阴影原理
  • .gitignore文件设置了忽略但不生效
  • .NET Core 发展历程和版本迭代
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .vimrc 配置项