我正在尝试衡量我的应用收到了多少字节。
我这样做是这样的:
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
最佳答案
我可以验证这也是发生在我身上。
从我观察到的行为来看,似乎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;
遵循这些原则。希望这会有所帮助。