通过shell读取
1.获取应用的userId
|
2.根据userId查询/proc/net/xt_qtaguid/stats文件
|
之后会得到类似如下输出:
|
其中rx_bytes代表接收的总字节数,tx_bytes代表发送的总字节数。
在开始统计时获取一次上述数据,结束时再获取一次,二者作差即可得到应用在这段时间使用的流量。
在应用内获取
使用Android NetworkStatsManager类获取应用的流量信息,官方文档地址NetworkStatsManager | Android Developers
1.在AndroidManifest.xml中添加如下权限
|
2.Android6以后的机型需要动态申请权限
|
3.查询流量情况
|
注:实测querySummary的startTime和endTime参数是不生效的,最终返回的值不是该应用在startTime到endTime这段时间内的流量,而是1小时内(如4点到5点)的流量数据。因此我们统计流量时也需要和shell方法一样,在开始时获取一次,结束时再获取一次,二者作差得到这段时间的流量数据。
实验对比
分别通过shell命令和NetworkStatsManager获取两次应用的流量情况,结果如下
|
这段时间内读取的bytes分别为3760814288 - 3725054960 = 89237125 - 53477797 = 35759328,两种方法统计的数据是完全一致的,对比Android手机自带的流量监控工具,数据同样能够匹配上。