我需要一些 API 或可操作的代码,以便我可以从安卓应用程序中测量 WiFi 连接的上传/下载速度和延迟时间。
我需要一些 API 或可操作的代码,以便我可以从安卓应用程序中测量 WiFi 连接的上传/下载速度和延迟时间。
你是否在使用2.2(Froyo)或更高版本?
如果是的话,在你的应用程序中导入Traffic Stats,并在应用程序使用互联网时添加以下内容。
下载/上传:
long BeforeTime = System.currentTimeMillis();
long TotalTxBeforeTest = TrafficStats.getTotalTxBytes();
long TotalRxBeforeTest = TrafficStats.getTotalRxBytes();
/* DO WHATEVER NETWORK STUFF YOU NEED TO DO */
long TotalTxAfterTest = TrafficStats.getTotalTxBytes();
long TotalRxAfterTest = TrafficStats.getTotalRxBytes();
long AfterTime = System.currentTimeMillis();
double TimeDifference = AfterTime - BeforeTime;
double rxDiff = TotalRxAfterTest - TotalRxBeforeTest;
double txDiff = TotalTxAfterTest - TotalTxBeforeTest;
if((rxDiff != 0) && (txDiff != 0)) {
double rxBPS = (rxDiff / (TimeDifference/1000)); // total rx bytes per second.
double txBPS = (txDiff / (TimeDifference/1000)); // total tx bytes per second.
testing[0] = String.valueOf(rxBPS) + "B/s. Total rx = " + rxDiff;
testing[1] = String.valueOf(txBPS) + "B/s. Total tx = " + txDiff;
}
else {
testing[0] = "No uploaded or downloaded bytes.";
}
现在你有了testing[0]
作为下载速度(大致),而testing[1]
则是上传速度(大致)。
确保只在实际进行网络通信时调用此代码,否则时间会导致结果偏差。
至于延迟方面,目前没有什么很好的方法。我写了下面这段代码,尚未经过测试,但应该可以正常运行,不过可能还有更好的解决方案。
延迟:
String host = YOUR_HOST
HttpGet request = new HttpGet(host);
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 3000);
HttpClient httpClient = new DefaultHttpClient(httpParameters);
for(int i=0; i<5; i++) {
long BeforeTime = System.currentTimeMillis();
HttpResponse response = httpClient.execute(request);
long AfterTime = System.currentTimeMillis();
Long TimeDifference = AfterTime - BeforeTime;
time[i] = TimeDifference
}
请注意,这并不会告诉您使用时的延迟,但会为您提供在特定时间段内使用的网络所经历的延迟的概念。此外,这是请求和响应时间,而不是像“ping”通常做的那样到达网络时间。
https://itu.int/en/ITU-T/C-I/Pages/IM/Internet-speed.aspx
https://itu.int/itu-t/recommendations/rec.aspx?rec=q.3960
https://itu.int/ITU-T/recommendations/rec.aspx?rec=14125
https://tools.ietf.org/pdf/rfc6349.pdf
您还可以使用我们的Android SDK,它可以满足您的需求,并符合ITU标准:
其次,您没有明确表示您是想要“wifi速度”还是“互联网速度”。Wifi速度是本地网络速度,与“互联网速度”不同。虽然有许多测试“互联网速度”的方法,但测试“wifi速度”要困难得多,因为通常很难在本地网络中获取远程服务器。再次提到,我们上面提到的Android SDK也可以测量wifi速度。