Android实时质量检测
传送门:
原理
使用ping -n -i %f -c %d %s
命令实现网络质量检测,具体参数如下:
-n count 发送 count 指定的 ECHO 数据包数。默认值为 4
-i 生存时间
-c 路由隔离仓标识符
如图ping后返回的最后一行可以看到min/avg/max/stddev,我们主要从avg来判断当前的网络质量
使用
1. 通过Ping.startSniffer方法开始调用,urls规则可以看Ping里面的getIp方法,从第7位开始到下一个":"截至,获取具体域名来ping
Ping.startSniffer("https://www.baidu.com:");
2. 在startSniffer中需要自己实现回调等方式把PingQuality.getQualityInt(s)获取的网络质量结果抛出
核心代码
使用ping命令获取返回的string,然后解析后获取到avg来判断网络质量。
private static PingResult pingCmd(String address, int count, int interval) {
String ip = null;
try {
ip = getIp(address);
} catch (UnknownHostException e) {
// Log.e(TAG, "parseResult", e);
}
if (ip == null) {
sleepTime = 2000;
return new PingResult("", address, "", 0);
} else {
sleepTime = 200;
}
String cmd = String.format(Locale.US, "ping -n -i %f -c %d %s", ((double) interval / 1000), count, ip);
Process process = null;
StringBuilder str = new StringBuilder();
BufferedReader reader = null;
BufferedReader errorReader = null;
try {
process = Runtime.getRu