Android TrafficStats getTotalRxBytes()始终返回零

时间:2012-01-05 21:54:27

标签: android networking

我正在尝试衡量我的应用收到的字节数。 我这样做:

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设备是运行Android 2.3.3的三星Galaxy Ace S5830

2 个答案:

答案 0 :(得分:3)

我可以证实这也发生在我身上。

从我观察到的行为来看,似乎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;

这些方面的东西。希望这会有所帮助。

答案 1 :(得分:-1)

您的设备可能不支持这些设置,并且可能会返回UNSUPPORTED,可能为0.