Мое приложение пытается подсчитать количество байтов, отправляемых и полученных по WiFi/LAN и мобильным соединениям данных. Для этого я получаю значения счетчиков TrafficStats
в один момент времени и вычитаю из своих значений при следующем проверке.
// get current values of counters
long currentMobileTxBytes = TrafficStats.getMobileTxBytes();
long currentMobileRxBytes = TrafficStats.getMobileRxBytes();
long totalTxBytes = TrafficStats.getTotalTxBytes();
long totalRxBytes = TrafficStats.getTotalRxBytes();
// to get mobile data count, subtract old from current
long currentMobileSent = currentMobileTxBytes - oldMobileTxBytes;
long currentMobileReceived = currentMobileRxBytes - oldMobileRxBytes;
// to get WiFi/LAN data count, subtract total from mobile
long currentNetworkSent = totalTxBytes - currentMobileTxBytes;
long currentNetworkReceived = totalRxBytes - currentMobileRxBytes;
Я считаю, что приведенный выше алгоритм является разумным, однако я не уверен, как проверить точность этих счетчиков. Например, когда я попытался загрузить 2,7 МБ файл в Dropbox через WiFi, значение currentMobileSent
, которое я получил, составляло около 10 МБ. И даже без серфинга в сети до следующей проверки я получаю ненулевые значения, указывающие, что я получил несколько байтов данных за период ожидания.
Есть ли способ проверить, как TrafficStats
поступает на эти цифры? Я знаю, что помимо моего браузера могут быть другие приложения, работающие в фоновом режиме, которые подключаются к Интернету, но от 2,7 МБ до 10 МБ просто кажется огромным прыжком - я даже "получил" 90 МБ один раз, ничего не делая. Или что-то не так с тем, как я вычисляю байты, отправленные и полученные?