gpt4 book ai didi

Android TrafficStats getTotalRxBytes() 总是返回零

转载 作者:行者123 更新时间:2023-11-29 22:14:40 27 4
gpt4 key购买 nike

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

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

最佳答案

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

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

类似的东西。希望这会有所帮助。

关于Android TrafficStats getTotalRxBytes() 总是返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750393/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com