Meine App versucht, die Anzahl der über WiFi/LAN und mobile Datenverbindungen gesendeten und empfangenen Bytes zu zählen. Um dies zu tun, bekomme ich die Werte von TrafficStats
Zähler zu einem Zeitpunkt und subtrahiere das von seinen Werten das nächste Mal, wenn ich überprüfe.Wie bekomme ich die korrekte Anzahl an Bytes, die in TrafficStats gesendet und empfangen wurden?
// 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 glaube, dass der obige Algorithmus sinnvoll ist, aber ich bin mir nicht sicher, wie die Genauigkeit dieser Zähler zu überprüfen. Als ich beispielsweise versuchte, eine 2,7-MB-Datei über WiFi auf Dropbox hochzuladen, betrug der Wert currentMobileSent
, den ich bekam, etwa 10 MB. Und selbst ohne das Internet bis zur nächsten Überprüfung zu durchforsten, erhalte ich Werte ungleich Null, die anzeigen, dass ich während der Wartezeit einige Datenbytes erhalten habe.
Gibt es eine Möglichkeit für mich zu überprüfen, wie TrafficStats
bei diesen Nummern ankommt? Mir ist bewusst, dass neben meinem Browser noch andere Anwendungen im Hintergrund laufen, die mit dem Internet verbunden sind, aber 2.7MB bis 10MB scheint nur ein riesiger Sprung - ich habe sogar einmal 90MB "empfangen", ohne etwas zu tun. Oder stimmt etwas nicht damit, wie ich die gesendeten und empfangenen Bytes berechne?
Danke. Ich werde das ausprobieren und auf Ihre Antwort zurückkommen, wenn es wirklich genauer funktioniert. –
ja, es wird für 100% funktionieren, ich bin sicher ... –
Dies überprüft nur die Anzahl der Bytes, die unabhängig von der Verbindung verwendet werden, richtig? Ich muss zwischen der Nutzung von mobilen Daten (3G, 4G) und der normalen WLAN/LAN-Nutzung unterscheiden. In jedem Fall scheint Ihr Ansatz mir ähnlich zu sein und bestätigt vielleicht, dass mein aktueller Algorithmus richtig ist. –