Android获取Wifi的数据

Android获取Wifi的数据

在anndroid中使用系統功能SystemService获取当前wifi状态。

常用获取办法

WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String ssid = wifiInfo.getSSID();

然后可以使用currectWIfi的getSSID,getBSSID(Mac),getNetId等。
注意:getAddress这个函数被弃用,现在应该只能返回02:00:00:00:00:00

Unknown ssid 和 02:00:00:00:00:00 问题

获取wifi 的ssid出现 ,获取bssid和mac获得 02:00:00:00:00:00 的问题,本质上是权限的缺失,Android的系统权限总体来说是处于不断收紧的状态,使用android的系统功能越来越复杂,在android 8.0 后,必须要打开定位的权限该App才能够使用权限,权限的申请如下所示:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

当然,即使在Manfiest中进行了权限的申请也不一定可以,因为我在小米的机型上测出了不会弹出权限询问弹窗的问题,这个时候就只能手动开启定位权限了吗?//TODO: 跟进权限请求弹窗不弹的问题

WifiManager

此对象为Android的系统功能,一般只能从Context#getApplicationContext()获取,而不能从任何其他派生上下文获取,以避免调用过程中内存泄漏(参考文档1)。 这是执行Wi-Fi特定操作时要使用的API,它的作用主要有:

  • 获取已配置网络的列表(曾经连接过的保存的wifi) ,获取当前所连wifi的数据
  • 断开当前连接或连接任意一个已配置网络(为配置网络因为没有netid应该无法在App中自动连接)
  • 定义了在Wi-Fi状态发生任何变化时广播的各种意图动作的名称。

ConnectivityManager

值得一提的是,在API29中,NetworkInfo这个类被弃用,所以ConnectivityManager的API发生了巨大的变化,例如getActiveNetworkInfo等返回值为NetworkInfo的API全部被弃用,转而使用getActiveNetwork等返回值是Network类的API,具体可以参考官方文档。

参考文献

  1. 浅析Context及可能带来的内存泄漏问题 : https://blog.csdn.net/u012403246/article/details/46285151
  2. ConnectivityManager Android 官方文档:https://developer.android.google.cn/reference/kotlin/android/net/ConnectivityManager.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值