Wie erhalte ich die korrekte Anzahl von Bytes, die in TrafficStats gesendet und empfangen wurden?

Meine App versucht, die Anzahl der über WiFi / LAN- und mobile Datenverbindungen gesendeten und empfangenen Bytes zu ermitteln. Dazu bekomme ich die Werte vonTrafficStats zählt zu einem Zeitpunkt und subtrahiert dies von seinen Werten, wenn ich das nächste Mal prüfe.

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

Ich halte den obigen Algorithmus für angemessen, bin mir jedoch nicht sicher, wie ich die Genauigkeit dieser Zähler überprüfen soll. Als ich zum Beispiel versuchte, eine 2,7 MB große Datei über WLAN auf Dropbox hochzuladen, wurde diecurrentMobileSent Wert, den ich bekam, war um 10MB. Und selbst ohne bis zur nächsten Überprüfung im Internet zu surfen, erhalte ich Werte ungleich Null, die darauf hinweisen, dass ich während der Wartezeit einige Datenbytes empfangen habe.

Gibt es eine Möglichkeit für mich zu überprüfen, wieTrafficStats Kommt bei diesen Nummern an? Ich bin mir bewusst, dass neben meinem Browser möglicherweise andere Anwendungen im Hintergrund ausgeführt werden, die eine Verbindung zum Internet herstellen, aber 2,7 MB bis 10 MB scheinen nur ein großer Sprung zu sein - ich habe sogar einmal 90 MB "erhalten", ohne etwas zu tun. Oder stimmt etwas nicht mit der Art und Weise, wie ich die gesendeten und empfangenen Bytes berechne?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage