Как измерять скорость загрузки / скачивания и задержку в соединении Wi-Fi android

Мне нужен некоторый api или манипулятивный код, с помощью которого я могу измерять скорость загрузки / скачивания и задержку соединения Wi-Fi от приложения Android.

Вы используете 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».