Я могу убедиться, что это происходило и со мной.
Из поведения, которое я наблюдал, похоже, что getTotalRxBytes работает только при подключенном Wi-Fi.Но следует помнить, что если вы пытаетесь получить точное число байтов, полученных, например, для файла, то швы должны быть отправлены дополнительно.
Так что, если вам не нужно это быть супер точным.Вы можете использовать getMobileRxBytes (), когда wifi не активен, и getTotalRxBytes (), когда wifi активен.
Вот простой пример.
т.е.:
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;
Что-то в этом роде.Надеюсь, это поможет.