我正在维护一个与wifi网络相关的小应用程序 . 当手机连接到wifi网络时,它会测试互联网连接 .
在具有两个相邻wifi网络(不同SSID)的地方测试和使用应用程序,其中覆盖范围略微重叠,运行Android 2.2.2的HTC Desire,从wifi A移动到B时断开连接和连接的顺序似乎是:
-
断开与WiFi A的连接
-
连接到wifi B.
现在有一个运行4.2.2的Fairphone,序列似乎是:
-
连接到wifi B.
-
断开与WiFi A的连接
这是否意味着与HTC Desire不同,Fairphone会进行某种漫游并首先连接到wifi,其信号变得比当前的wifi连接强,然后放弃“旧的”wifi连接?
我问这个问题是因为如果我的观察是正确的,这对应用程序的行为有一些影响,即它不应该考虑最后的wifi连接事件,而是检查无线连接的实际状态,无论最后一个事件是“连接”还是“断开连接” .
1 回答
在Android上,就像许多Linux风格一样,wpa_supplicant控制着漫游行为 . 你可以调查一下,看看它在做什么 .
特别是为了回答您的问题,WLAN设备(在Linux中)可能使用不同类型的驱动程序:
SoftMAC:MLME(媒体访问控制(MAC)子层管理实体)在软件中管理 .
FullMAC:MLME由硬件管理 .
特别是一些MLME函数are:
验证
Deauthenticate
Associate
Disassociate
重新关联
因此,在Android的不同设备和版本(驱动程序类型,wpa_supplicant)上的某些机制中会出现差异 .
漫游的正确802.11行为是向新选择的AP发送重新关联请求 . 首先从AP解除关联以及稍后与新AP关联的客户端实际上不支持802.11漫游并通过SoftMac方法使用某种假漫游 .
在发送到站的标准漫游分组中,不会丢失并且从一个AP转发到漫游AP以便漫游站接收它们 .