Android TrafficStats getTotalRxBytes () всегда возвращает ноль - PullRequest
1 голос
/ 06 января 2012

Я пытаюсь измерить, сколько байтов получило мое приложение.Я делаю это так:

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 является Samsung Galaxy Ace S5830 под управлением Android 2.3.3

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Я могу убедиться, что это происходило и со мной.

Из поведения, которое я наблюдал, похоже, что 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;

Что-то в этом роде.Надеюсь, это поможет.

0 голосов
/ 07 января 2012

Они могут не поддерживаться на вашем устройстве и могут возвращать UNSUPPORTED, что может быть 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...