В Android, как измерить трафик данных на интерфейс для приложения - PullRequest
13 голосов
/ 25 ноября 2011

Я хочу реализовать расширение до android.net.TrafficStats для измерения трафика данных на APN или на APN для приложения.прототип методов выглядит следующим образом:

getInterfaceTxPackets(String interface)
getInterfaceRxPackets(String interface)
getInterfaceTxBytes(String interface)
getInterfaceRxBytes(String interface)
getUidInterfaceTxPackets(int uid,String interface)
getUidInterfaceRxPackets(int uid,String interface)
getUidInterfaceTxBytes(int uid,String interface)
getUidInterfaceRxBytes(int uid,String interface)

Я прочитал android.net.TrafficStats.java, он вызывает собственные методы в android_net_TrafficStats.cpp, а собственные методы читают статистику трафика из некоторых файлов:

  • все файлы статистики трафика находятся в папке /sys/class/net/, в этой папке есть несколько подпапок, таких как: eth0, ip6tnl0, rmnet0, rmnet1, rmnet2, rmnet3., Файлы подробной статистики сохраняются в этих папках..

  • файлы статистики трафика для каждого приложения находятся в /proc/uid_stat/[uid]/

Мои вопросы:

  1. Сделать папку rmnet0, rmnet1, rmnet2, rmnet3...соответствовать каждому APN?Если да, каково правило соответствия?если нет, как я могу получить статистику трафика каждой APN?

  2. В папке /proc/uid_stat/[uid]/, есть только два файла: tcp_rcv и tcp_snd, как я могу получить каждыйприменение на каждой APN статистики трафика?

1 Ответ

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

Пожалуйста, переключитесь на Android 4.0, где для мониторинга использования данных это было усилено. Эти API-интерфейсы теперь расположены поверх гораздо более сложной службы, которая собирает информацию о трафике для каждого интерфейса для каждого интерфейса.

Обратите внимание, что с каждым из имен интерфейсов нет смысла, поэтому нельзя просто предполагать, что определенное имя, которое вы найдете на одном устройстве, означает то же самое на другом.

...