2016-03-20 5 views
0

Ich möchte Android-Download-Geschwindigkeitstest erstellen. Dazu benutze ich die TrafficStats-Klasse. Problem ist, dass ich falsche Ergebnisse bekomme. Die Ergebnisse sind fast gleich, wenn ich den Test ausführe, aber ich habe meine Internetverbindung stark belastet, bevor ich den Test ausführe. Ich lade Datei für 30 Sekunden und danach (oder wenn Datei heruntergeladen wird) und dann Bytes mit TrafficStats berechnenBerechnete Download-Geschwindigkeit ist falsch, wenn TrafficStats-Klasse verwendet wird

Weiß jemand wo ist das Problem?

Dies ist Code, den ich verwende:

@Override 
     protected String doInBackground(String... urls) { 
      String downloaded =""; 
      // String uploaded = ""; 
      try{ 

       long BeforeTime = System.currentTimeMillis(); 
       long TotalTxBeforeTest = TrafficStats.getTotalTxBytes(); 
       long TotalRxBeforeTest = TrafficStats.getTotalRxBytes(); 
       URL url = new URL(urls[0]); 
       URLConnection connection = new URL(urls[0]).openConnection(); 
       connection.setUseCaches(false); 
       connection.connect(); 
       InputStream input = connection.getInputStream(); 

       BufferedInputStream bufferedInputStream = new BufferedInputStream(input); 
       byte[] buffer = new byte[1024]; 
       int n = 0; 
       long endLoop = BeforeTime+30000; 
       while(System.currentTimeMillis() < endLoop) { 
        /* if (bufferedInputStream.read(buffer) != -1){ 
         break; 
        }*/ 
       } 
       long TotalTxAfterTest = TrafficStats.getTotalTxBytes(); 
       long TotalRxAfterTest = TrafficStats.getTotalRxBytes(); 
       long AfterTime = System.currentTimeMillis(); 

       double TimeDifference = AfterTime - BeforeTime; 
       double rxDiff = TotalRxAfterTest - TotalRxBeforeTest; 
       double txDiff = TotalTxAfterTest - TotalTxBeforeTest; 
       Log.e(TAG, "Download skinuto. "+ rxDiff); 
       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. 
        downloaded = String.valueOf(rxBPS) + "B/s. Total rx = " + rxDiff; 
        // uploaded = String.valueOf(txBPS) + "B/s. Total tx = " + txDiff; 
       } 
       else { 
        downloaded = "No downloaded bytes."; 
       } 
      } 
      catch(Exception e){ 
       Log.e(TAG, "Error while downloading. "+ e.getMessage()); 
      } 
      return downloaded; 
     } 

Antwort

0

Ich habe versucht, Ihren Code - es scheint gut für mich zu arbeiten, aber ich geändert

while(System.currentTimeMillis() < endLoop) { 
    /* if (bufferedInputStream.read(buffer) != -1) { 
      break; 
     }*/ 
} 

zu

while(System.currentTimeMillis() < endLoop) { 
    if (bufferedInputStream.read(buffer) == -1){ 
     break; 
    } 
} 

seit read gibt -1 zurück, wenn das Ende des Streams erreicht ist.

Verwandte Themen