以编程方式获取Wi-Fi协议(802.11a / b / g / n)

时间:2013-09-23 18:00:51

标签: android network-protocols wifimanager

通过WifiManager,我的Android应用程序可以获得有关Wi-Fi的大量详细信息。但是我没有像a / b / g / n那样获得协议类型。我有客户要求这样做。

有谁知道如何实现这一目标? (我没有选择使用adb)。它将以编程方式完成。我坚信设备和路由器在连接之前已经协商了协议。所以信息与设备有关。问题是,我们如何得到它?

2 个答案:

答案 0 :(得分:10)

您可以从链接速度

部分推断出协议

WifiManager.getConnectionInfo().getLinkSpeed()

通过Wikipedia 802.11 protocols speed表,您可以判断它是802.11b,802.11n还是802.11ag 802.11n802.11ac完整链接速度表

协议802.11a和802.11g的链接速度相同,您可以通过扫描结果中使用的频率(5GHz或2.4GHz)区分它们。

请注意,协议可以在连接期间发生变化,客户端和接入点会协商协议和速度但是它们在列表上达成一致,而不是在一个特定的速度上。

我认为没有办法区分802.11n和802.11ac的重叠速度。

答案 1 :(得分:2)

我不相信这可以以干净的方式进行。协议 - a,b,g,n等 - 实际上是网络中MAC和物理层的人类抽象。如果它们满足设备和网络设备的某些硬件规范,则将它们定义为可识别的字母。

在做了一些挖掘之后,似乎Windows phones are able to display this information。在深入了解在Windows上确定协议的方式时,我遇到了the desktop explanation以及Visual C++ implementation via enums。似乎即使是正式的Windows文档依赖于供应商提供的数据和枚举值,这也会让我相信他们需要确定超出Android API中可能出现的硬件规范。

如果您想自行确定协议,则需要了解链接速度以及frequency, modulation, and bandwidth

<强> TL; DR

除非您使用root手机并且可以直接访问硬件规格,否则可能无法实现。