一、目标
APP中实现监听Android设备(手机、TV或其他设备)已连接的wifi的状态信息,并定时上传至服务器,用于分析特定时间点设备所在环境中wifi的状态及信号强度。
二、使用场景
多个智能WiFi设备组成的实际场景中,设备偶尔出现了控制失败的情况,需结合场景中当时的wifi状态及信号强度,分析设备控制失败的原因。故希望通过场景中的某个Android设备上安装此APP,监听wifi状态信息,并上传服务器。
前提:装有此APP的Android设备与场景中其他WiFi设备连接的是同一个路由器。
三、可选方案
方案一:根据已连接的wifi信息判断信号强度
根据Android系统提供给开发者的已连接的wifi信息,可以衡量wifi环境的信号强度,相关参数(WifiInfo类的方法)的描述及说明如下:
参数 | 参数(方法) | 描述 | 说明 |
---|---|---|---|
mac | getBSSID() | 获取基本服务集标识符(BSSID)当前的访问点 | |
wifi_name | getSSID() | 获取wifi的名称 | |
rssi | getRssi() | 获取wifi接收信号的强度 | 单位:dBm,取值范围-100~0,绝对值越小信号越强 |
ip | getIpAddress() | 获取wifi的IP地址 | 连接的路由的IP |
link_speed | getLinkSpeed() | 获取当前的链接速度 | |
frequency | getFrequency() | 获取当前的频率 | |
channel | getFrequency() | 信道 | 可通过频率判断当前的信道 |
另外 信道的作用,可参考下面的链接的详细介绍:
http://cnzhx.net/blog/13-channels-of-wifi/
其中,主要依据getRssi()方法返回的数值衡量wifi信号的强度,-50dBm–0表示信号很好,-70dBm~-50dBm表示信号较差,小于-70dBm表示信号极差,存在连接不上的可能性。
但是,getRssi()方法返回的数值只能用来衡量设备连接到路由器的内网的信号强度,至于是否能访问外网、访问外网的速度需要有新的方案来判断信号强度。
方案二:运用“PING”命令检查网络请求是否连通
Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议,回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答),用来检查网络是否通畅或者网络连接速度的命令。
通过分析每次PING命令返回的结果中的相关参数,判断网络请