Jak uzyskać prawidłową liczbę bajtów wysłanych i odebranych w TrafficStats?

Moja aplikacja próbuje policzyć liczbę bajtów wysłanych i odebranych przez połączenia WiFi / LAN i połączenia danych mobilnych. Aby to zrobić, otrzymuję wartościTrafficStats liczy w jednym punkcie czasu i odejmuje to od jego wartości przy następnym sprawdzeniu.

// 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;

Uważam, że powyższy algorytm jest rozsądny, jednak nie jestem pewien, jak sprawdzić dokładność tych liczników. Na przykład, kiedy próbowałem przesłać plik 2.7MB do Dropbox przez WiFi,currentMobileSent wartość, którą otrzymałem, wynosiła około 10 MB. I nawet bez surfowania po sieci do następnego sprawdzenia, otrzymuję niezerowe wartości wskazujące, że otrzymałem kilka bajtów danych w okresie oczekiwania.

Czy mogę sprawdzić jak to zrobićTrafficStats dociera do tych numerów? Jestem świadomy, że oprócz mojej przeglądarki mogą istnieć inne aplikacje działające w tle, które łączą się z Internetem, ale od 2,7 MB do 10 MB po prostu wydaje się ogromnym skokiem - nawet „otrzymałem” 90 MB raz, nie robiąc nic. Czy może jest coś nie tak ze sposobem, w jaki obliczam bajty wysłane i odebrane?

questionAnswers(1)

yourAnswerToTheQuestion