2012-01-05 41 views
1

我試着多少來衡量字節我的應用程序已經收到。 Im做這樣說:的Android TrafficStats getTotalRxBytes()總是返回零

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

我的問題是getTotalRxBytes()總是返回0。所以,我的結果是0,無論我做什麼。 我已經發現該方法只是閱讀一些TEXTFILES像

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

所以,我看着這些文件,它們都含有隻是「0」。

難道我錯過了什麼或做我必須以某種方式激活這個功能呢? 有沒有另一種方法來衡量我的應用程序已收到多少字節?

我的Android設備是三星Galaxy王牌S5830運行Android 2.3.3

回答

-1

這些可能不是你的設備上支持的,並且可以返回UNSUPPORTED,這可能是0

+2

如果不支持,函數的確會返回UNSUPPORTED。但是,文檔指出這是-1,而不是0 的問題可能是我的設備是不更新相應的文本文件,所以他們始終保持0 是否有任何其他方式來實現getTotalRxBytes的功能? – Orangenlimo 2012-01-08 00:59:25

2

我可以確認這是也發生在我身上。

從我所觀察到的行爲,它出現的WiFi連接時getTotalRxBytes纔有效。但需要注意的是,如果您試圖獲取文件接收的準確字節數,例如接收到的額外字節發送。

所以,如果你不需要它是超級準確。當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 2012-01-15 20:37:57