2012-01-05 233 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