2012-01-05 5 views
1

私のアプリが受信したバイト数を測定しようとしています。このようにそれをやって イム:Android TrafficStats getTotalRxBytes()は常にゼロを返します

long receivedBytesBefore = TrafficStats.getTotalRxBytes(); 
... 
doSomething(); 
... 
long receivedBytesAfter = TrafficStats.getTotalRxBytes(); 
long receivedBytes = receivedBytesAfter - receivedBytesBefore; 

私の問題は、getTotalRxBytes()は常にだから私の結果は関係なく、私は何をすべきか0ではありません0を返すということです。 私は方法はただ

/sys/class/net/rmnet0/statistics/rx_bytes 

のようないくつかのテキストファイルを読んでいるので、私はこれらのファイルの中に見て、彼らはすべてがちょうど「0」が含まれていることを見出しました。

何かが間違っていたり、何とかこの機能を有効にする必要がありますか? 私のアプリが受け取ったバイト数を測定する別の方法はありますか?

私のAndroidデバイスは、サムスンギャラクシーエースS5830はこれらがあなたのデバイス上でサポートされていない可能性のAndroid 2.3.3

答えて

-1

を実行している、と私はこれがされたことを確認することができます0

+2

サポートされていない場合、関数は実際にはUNSUPPORTEDを返します。しかし、ドキュメントでは、これは-1であり、0ではないことが示されています。 私のデバイスが対応するテキストファイルを更新していないため、常に0になるという問題があります。 getTotalRxBytesの機能を実現する他の方法はありますか? – Orangenlimo

2

であるかもしれない、UNSUPPORTEDを返すことができています私にも起こっている。

私が見てきた動作から、getTotalRxBytesはwifiが接続されている場合にのみ動作するようです。しかし、注意すべき点は、例えばファイルに対して正確なバイト数を取得しようとしている場合、送信される余分なバイト数があることです。

超正確である必要がない場合は、 wifiがアクティブでない場合はgetMobileRxBytes()を使用し、wifiがアクティブの場合はgetTotalRxBytes()を使用できます。

ここは簡単な例です。

すなわち:これらの線に沿って

ConnectivityManager connManager; 
    connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    long initialBytes = 0; 
    long finalBytes = 0; 
    long byteDifference = 0; 
    boolean onWifi= false; 

    if (mWifi.isConnected()) 
    { 
    //wifi connected 
    initialBytes = TrafficStats.getTotalRxBytes(); 
    onWifi = true; 
    } 
    else if (mMobile.isConnected()) 
    { 
    //if 3g/4g connected 
    initialBytes = TrafficStats.getMobileRxBytes(); 
    onWifi = true; 
    } 
    else 
    { 
    //Something funny going on 
    Log.e("Error", "Something funny going on"); 
    return; 
    } 


// Process whatever you want to process 


    if(onWifi) 
    { 
     finalBytes = TrafficStats.getTotalRxBytes(); 
    } 
    else 
    { 
     finalBytes = TrafficStats.getMobileRxBytes(); 
    } 

    byteDifference = finalBytes - initialBytes; 

何か。うまくいけば、これは役に立ちます。

+0

あなたの答えをありがとうが、これは私の問題を解決しません。私はまだ結果として0しか得ていません。私は別の電話(Nexus One)で私の質問に投稿したコードをテストして、うまくいきました。私の問題は、互換性のない私のデバイスだと思います。 – Orangenlimo

関連する問題