В Android, как измерять трафик данных для каждого приложения на приложение
Я хочу реализовать расширение для 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]/
Мои вопросы:
-
Сделайте папку rmnet0, rmnet1, rmnet2, rmnet3..
. соответствовать каждому APN? Если да, то какое правило матча? если нет, как я могу получить статистику трафика APN?
-
В папке /proc/uid_stat/[uid]/,
есть только два файла: tcp_rcv
и tcp_snd
, как я могу получить каждое приложение для каждой статистики трафика APN?
Ответы
Ответ 1
Пожалуйста, переключитесь на Android 4.0, где для мониторинга использования данных это было усилено. Эти API теперь располагаются поверх гораздо более сложного сервиса, который собирает информацию о per-uid для каждого интерфейса.
Обратите внимание: нет никакого значения, связанного с каждым из имен интерфейса, поэтому вы не можете просто предположить, что определенное имя, которое вы найдете на одном устройстве, означает то же самое на другом.