在安卓系统中,如何测量每个应用程序在每个接口上的数据流量?

13

我想要实现扩展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_rcvtcp_snd,我如何获取每个应用程序在每个APN上的流量统计数据?


你使用的是ICS吗?在我看来,应用程序流量统计仅在ICS上可用,请参见http://developer.android.com/sdk/android-4.0-highlights.html#data-dev。 - ChrLipp
2
我在ICS上找到了NetworkStatsFactory.java,它可以满足这个要求。谢谢。 - freeman
1个回答

0
请切换到Android 4.0,因为数据使用监控已经得到加强。这些API现在位于一个更复杂的服务之上,该服务收集每个接口每个UID的流量信息。
请注意,每个接口名称都没有关联的含义,因此您不能仅仅假设在一个设备上找到的特定名称在另一个设备上意味着相同的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接