Android TrafficStats getTotalRxBytes()始终返回零

Android TrafficStats getTotalRxBytes()始终返回零,android,networking,Android,Networking,我正在尝试测量我的应用程序收到了多少字节。 我是这样做的: long receivedBytesBefore = TrafficStats.getTotalRxBytes(); ... doSomething(); ... long receivedBytesAfter = TrafficStats.getTotalRxBytes(); long receivedBytes = receivedBytesAfter - receivedBytesBefore; 我的问题是getTotalRxB

我正在尝试测量我的应用程序收到了多少字节。 我是这样做的:

long receivedBytesBefore = TrafficStats.getTotalRxBytes();
...
doSomething();
...
long receivedBytesAfter = TrafficStats.getTotalRxBytes();
long receivedBytes = receivedBytesAfter - receivedBytesBefore;
我的问题是getTotalRxBytes()总是返回0。所以无论我做什么,我的结果都是0。 我发现这个方法只是读取一些文本文件,比如

/sys/class/net/rmnet0/statistics/rx_bytes
所以我查看了这些文件,它们都只包含“0”

我是否错过了什么,或者我是否必须以某种方式激活此功能? 有没有其他方法可以测量我的应用程序收到了多少字节


我的安卓设备是运行安卓2.3.3的三星Galaxy Ace S5830,这些设备可能不受支持,并且可能返回不受支持的
,可能为0。

我也可以验证这是否发生在我身上

从我观察到的行为来看,getTotalRxBytes似乎只有在连接wifi时才起作用。但需要注意的是,如果您试图获得一个文件接收的准确字节数,例如,可能会发送一些额外的字节

所以,如果你不需要它是超级准确。您可以在wifi未激活时使用getMobileRxBytes(),在wifi激活时使用getTotalRxBytes()

下面是一个简单的例子

即:


沿着这条线的东西。希望这能有所帮助

如果不支持该函数,该函数将返回UNSUPPORTED。但是文档说明这是-1而不是0。问题可能是我的设备没有更新相应的文本文件,因此它们始终保持为0。有没有其他方法可以实现getTotalRxBytes的功能?谢谢你的回答,但这并不能解决我的问题。我的成绩仍然只有0分。我已经在另一部手机(NexusOne)上测试了我在问题中发布的代码,效果很好。我想问题是我的设备不兼容。
    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;