如何衡量android wifi连接的上传/下载速度和延迟

时间:2011-03-04 12:11:21

标签: android

我需要一些api或操作代码,通过它我可以从Android应用程序测量上传/下载速度和wifi连接的延迟。

2 个答案:

答案 0 :(得分:18)

您使用的是2.2(Froyo)还是更高?

如果是这样,请在您的应用程序中导入流量统计信息,并在您的应用程序使用互联网时添加以下内容。

下载/上传:

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”通常会这样做。

答案 1 :(得分:0)

有两种主要方法来计算下载/上传速度。

被动测试-已经建议使用TrafficStats API。此方法将为您提供更接近实际用户体验的速度。但是,它不会为您提供容量测量-即连接的预期容量是多少。例如,对于固定网络,ISP通常会根据速度来销售软件包,例如100 Mbit封装,1 Gbit封装。如果您想查看ISP是否正在提供这种速度,那么被动方法是不可行的!由于用户不会一直使用全部容量,因此速度将大大降低。另外,请记住,不可能通过使用TrafficStats的被动方法进行延迟测试。

主动测试-此方法需要将数据下载并上传到远程服务器,以获取下载/上传速度和延迟。对于此类测试,有 许多采样方法,没有一个“真正的”速度。您可以检查以下标准,以使您更好地了解推荐的方法:

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,该SDK应该可以满足您的要求并符合ITU标准:

https://github.com/speedchecker/speedchecker-sdk-android

其次,您还不清楚要使用“ wifi速度”还是“互联网速度”。 Wifi速度是与“ Internet速度”不同的本地网络速度。尽管有很多方法可以测试“ Internet速度”,但是测试“ wifi速度”却更具挑战性,因为通常很难将远程服务器放入本地网络。同样,我上面引用的Android SDK也可以测量wifi速度