最近在做一个项目,是一个公司的无线系统,包括网络配置,服务器端,PC客户端和ANdroid客户端几个部分。
我主要是是在前人的基础上负责android端程序的编写。
其中有一条需求是,在同一个ssid下不同bssid的无缝切换。
这个问题困扰了很久,知道现在也没有很好的解决。。
拿到手的思路很简单,当达到切换条件后,断开当前连接AP,然后连接新的AP,然后进行重新认证。。目前主体思路也还是这样没变
第一个版本是监听系统的rssi_changed_action广播,比较当前连接的BSSID的RSSI值与相同SSID的最强信号,如果相差达到一定阈值,马上进行切换动作;
用了一段时间后,发现这个系统广播非常不稳定,不会每隔几秒就发一次什么的,于是在第二个版本中换用了scanresult_avaible_action这个广播,因为发现切换动作并不依赖某个特定广播,而且scan_action相比较第一版的广播稳定很多,基本上每隔3S就发一次。。
但在拔掉某个AP的测试环境下,时延还是很严重,于是就有了第三个版本,在监听以上两个广播的基础上,加上了电池电量变化广播和每隔一秒发送一次的系统时钟广播,这两个发送的频率更高。
在现有情况下,感觉系统还不是很稳定,时延有时还是会比较大。
晚上研究无线协议,找到一个802.11r,快速漫游协议。。这两天好好研究下,以及该协议在Android平台的实现现状。。
附上一个android社区对该协议的讨论:http://code.google.com/p/android/issues/detail?id=17972
————————————————————————————————————————————————————
(20140703)
今天又看到这这篇文章,突然想起上面的表述是有问题的。。之前做的并不是相同ssid下不同bssid的切换,而是在同一个ssid下有两套不同的控制器,比如说Cisco一套,Motorola一套,然后实现在分属于两个不同控制器下的bssid进行切换。
所以上面提到的11r协议可能并不能很好的解决这个问题,目前我做到的也就是1)监听不同bssid的rssi、2)比较各收到的rssi的强弱、3)判断是否属于同一套控制器,若相同则不作处理;若不是,则在达到切换条件下手动进行切换。
(/20140703)