2016-03-20 5 views
0

Androidのダウンロード速度テストを作成します。これを行うには、TrafficStatsクラスを使用しています。問題は私が間違った結果を得ていることです。テストを実行すると結果はほぼ同じですが、テストを実行する前にインターネット接続に負荷がかかります。 30秒間ファイルをダウンロードした後(またはファイルがダウンロードされたとき)、TrafficStatsを使用してバイトを計算します。TrafficStatsクラスを使用すると計算されたダウンロード速度が間違っています

どこに問題があるのか​​誰かが知っていますか?

これは私が使用していたコードです:

@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; 
     } 

答えて

0

私はあなたのコードを試してみました - 私のために正常に動作するようですが、私は以来、

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

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

を変更readは、ストリームの終わりに達すると-1を返します。