1

我正在维护一个与 wifi 网络相关的小应用程序。当手机连接到 wifi 网络时,它会测试互联网连接。

在使用运行 Android 2.2.2 的 HTC Desire 在具有两个相邻 wifi 网络(不同 SSID)且覆盖范围略有重叠的地方测试和使用该应用程序时,从 wifi A 移动到 B 时断开和连接的顺序似乎是:

  1. 断开wifi A
  2. 连接到wifi B

现在使用运行 4.2.2 的 Fairphone,序列似乎是:

  1. 连接到wifi B
  2. 断开wifi A

这是否意味着与 HTC Desire 不同,Fairphone 进行某种漫游并首先连接到信号变得比当前 wifi 连接更强的 wifi,然后断开“旧”wifi 连接?

我问这个问题是因为如果我的观察是正确的,这会对应用程序的行为产生一些影响,即它不应该考虑最后一个 wifi 连接事件,而是检查 wifi 连接的实际状态,无论最后一个事件是否“已连接”或“断开连接”。

4

1 回答 1

1

在 android 上,与许多 linux 风格一样,wpa_supplicant控制漫游行为。你可以看看它,看看它在做什么。

专门回答您的问题,WLAN 设备(在 linux 中)可以使用不同类型的驱动程序:

  • SoftMAC:MLME(媒体访问控制(MAC)子层管理实体)在软件中进行管理。
  • FullMAC:MLME 在硬件中进行管理。

特别是一些 MLME 功能

  • 认证
  • 取消身份验证
  • 联系
  • 解除关联
  • 重新关联

因此,在不同的设备和 Android 版本(驱动程序类型、wpa_supplicant)上,这些机制的一些差异是可以预料的。

漫游的正确 802.11 行为是向新选择的 AP 发送重新关联请求。首先与 AP 解除关联,然后再与新 AP 关联的客户端实际上不支持 802.11 漫游,而是通过 SoftMac 方法使用某种假漫游。

在标准漫游中,发送到站点的数据包不会丢失,而是从一个 AP 转发到漫游的 AP,以便漫游站点接收它们。

于 2015-08-26T17:04:33.347 回答