TrafficStats.getTotalRxBytes не считает поток трафика videoview - PullRequest
3 голосов
/ 03 декабря 2011

Я делаю софт для воспроизведения онлайн-видео, и я пытаюсь добавить функцию статистики трафика для софта.Я пытаюсь использовать TrafficStats и функцию getUidRxBytes.однако, он не учитывает чистый трафик videoview.Как и в следующем коде, я вижу, что rx (возвращаемое getTotalRxBytes) сильно увеличивается, но myapprx (возвращаемое getUidRxBytes) не меняется.

int uid = VideoViewPlayer.this.getApplicationInfo().uid;
long rx = TrafficStats.getTotalRxBytes();
long tx = TrafficStats.getTotalTxBytes();
long myapprx = TrafficStats.getUidRxBytes(uid);
long myapptx = TrafficStats.getUidTxBytes(uid);
String info = "uid:"+uid+" rx:"+rx+" tx:"+tx+" myrx:"+myapprx+" mytx:"+myapptx;

ОБНОВЛЕНИЕ
СпасибоВо-первых, ваш комментарий дает мне важную подсказку.И я пытаюсь найти UID, отвечающий за пропаривание медиа.Я использую следующий код. Однако я не могу найти процесс, который потребляет трафик.

        List<ActivityManager.RunningAppProcessInfo> appProcessList = am.getRunningAppProcesses();
        ActivityManager.RunningAppProcessInfo info=null;
        //List<ActivityManager.RunningServiceInfo> appProcessList = am.getRunningServices(100);
        //ActivityManager.RunningServiceInfo info = null;

        strinfo = "";
        long max =0;
        for(int i=0;i<appProcessList.size();++i)
        {
            info = appProcessList.get(i);
            String key = info.processName+"_" +info.uid;

            if(mNetTraffic.containsKey(key))
            {
                long myrx = TrafficStats.getUidRxBytes(info.uid);
                long lastrx = mNetTraffic.get(key).longValue();
                mNetTraffic.put(key, new Long(myrx));
                if(myrx-lastrx>max && myrx - lastrx>0)
                {
                    max = myrx-lastrx;
                    strinfo = key +":"+max;
                }
            }else
            {
                long myrx = TrafficStats.getUidRxBytes(info.uid);
                mNetTraffic.put(key, new Long(myrx));
            }
        }
        //trying to watch the key and max and find process and uid, sadly cant find it

Ответы [ 2 ]

1 голос
/ 03 марта 2012

У меня была та же проблема, и мне удалось выяснить, какой UID процесса имеет потоковое мультимедиа: UID 1013

http://forum.xda -developers.com / showthread.php? T = 442557

http://android -dls.com / wiki / index.php? Title = Android_UIDs_and_GIDs

Надеюсь, это поможет:)

1 голос
/ 03 декабря 2011

Для потокового мультимедиа необходимо указывать другой UID, поскольку он фактически передается и воспроизводится внутренним процессом и модулем Android (OpenCORE или StageFright, в зависимости от версии Android).

...