天无绝人之路,在TrafficStats身上无法满足我们的需求,我们就要继续寻找可以满足我们需求的方法,最终找到一个NetworkStatsManager,虽然不尽完美但可勉强实现我们的功能。
NetworkStatsManager
在Android 6.0(API23)中新增加的类,提供网络使用历史统计信息,同时特别强调了可查询指定时间间隔内的统计信息。看看部分函数(非静态):
//查询指定网络类型在某时间间隔内的总的流量统计信息NetworkStats.BucketquerySummaryForDevice(intnetworkType,StringsubscriberId,longstartTime,longendTime)
//查询某uid在指定网络类型和时间间隔内的流量统计信息NetworkStats.queryDetailsForUid(intnetworkType,StringsubscriberId,longstartTime,longendTime,intuid)
//查询指定网络类型在某时间间隔内的详细的流量统计信息(包括每个uid)NetworkStats.queryDetails(intnetworkType,StringsubscriberId,longstartTime,longendTime)
从上述函数和文档看,NetworkStatsManager类克服了TrafficStats的查询限制,而且统计信息也不再是设备重启以来的数据。但它也有自己的限制和缺点。
(1)权限限制
NetworkStatsManager的使用需要额外的权限,”android.permission.PACKAGE_USAGE_STATS”是系统权限,需要主动引导用户开启应用的“有权查看使用情况的应用”(使用记录访问权限)权限,后面会有代码示例。
(1)AndroidM