Подтвердить что ты не робот

В 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?

4b9b3361

Ответ 1

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

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