Android有两个类可统计流量:
NetworkStatsManager及TrafficStats,如下详细介绍:
一、NetworkStatsManager获取流量信息
1. Bucket querySummaryForDevice(NetworkTemplate template,long startTime, long endTime)
查询指定网络某个时间段的总流量
2. Bucket querySummaryForUser(int networkType, String subscriberId, long startTime,long endTime)
查询指定网络某个时间段所有UID的总流量
3. NetworkStats querySummary(int networkType, String subscriberId, long startTime,long endTime)
查询当前UID指定网络某个时间段的总流量
4. NetworkStats queryDetails(int networkType, String subscriberId, long startTime,long endTime)
Query network usage statistics details. Result filtered to include only uids belonging to calling user.
5. registerUsageCallback(int networkType, String subscriberId, long thresholdBytes,UsageCallback callback)
监听指定网络使用流量情况
6. queryDetails分析:
1. 根据networkType、subscriberId创建NetworkTemplate
2. 创建NetworkStats
3. 查询NetworkStats.startUserUidEnumeration
6.1 NetworkStats.startUserUidEnumeration分析
1. mSession获取:statsService.openSessionForUsageStats(flags, context.getOpPackageName());
数据信息保存在:/data/system/netstats/目录下面,打印出来乱码
二、TrafficStats获取流量信息
1. long getMobileRxBytes()
获取移动网络收到的字节总数
2. long getMobileRxPackets()
获取移动网络收到的数据包总数
3. long getMobileTxBytes()
移动网络发送的总字节数,
4. long getMobileTxPackets()
移动网络发送的总数据包数
5. long getTotalRxBytes()
获取移动网络和WiFi总的接收字节数
6. long getTotalRxPackets()
移动网络和WiFi总包
7. long getTotalTxBytes()
移动网络和WiFi总的发送字节数
8. long getTotalTxPackets()
移动网络和WiFi总数据包数
9. long getUidRxBytes(int uid)
获取UID的接受字节数
10. long getUidTxBytes(int uid)
获取UID的发送字节数
TrafficStats不能获取准确的时间点流量信息
命令获取流量信息:
1. dumpsys netstats --full --uid --tag
2. dumpsys netstats detail