Android TrafficStats getTotalRxBytes() 始终返回零

问题描述 投票:0回答:3

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

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 的 Samsung Galaxy Ace S5830

android networking
3个回答
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;

类似的事情。希望这有帮助。


0
投票

您将读取 0 字节,因为您无法访问此目录:

"/sys/class/net/rmnet0/statistics/tx_bytes"
"/sys/class/net/ppp0/statistics/tx_bytes"
"/sys/class/net/rmnet0/statistics/rx_bytes"
"/sys/class/net/ppp0/statistics/rx_bytes"

现在您只需要使用类 TrafficStats:

读取值
Log.i(TAG, MobileTxBytes: ${TrafficStats.getMobileTxBytes()}")
Log.i(TAG, "MobileRxBytes: ${TrafficStats.getMobileRxBytes()}")
Log.i(TAG, "MobileTxPackets: ${TrafficStats.getMobileTxPackets()}")
Log.i(TAG, "MobileRxPackets: ${TrafficStats.getMobileRxPackets()}")

-1
投票

您的设备可能不支持这些,并且可能返回

UNSUPPORTED
,可能为 0。

© www.soinside.com 2019 - 2024. All rights reserved.