如何获得1个月的GPRS移动数据使用?

时间:2016-10-14 09:37:02

标签: android gprs network-traffic android-trafficstats

我已经搜索了很多关于此的内容。在任何地方找到相同的代码,部分地解决了目的。正如API文档所述,它会在设备重启后重置计数器。有时,即使没有重启,计数器也会重置。以下是代码

float totalRxBytes = (float)TrafficStats.getTotalRxBytes()/(float)1048576;  // Received
float totalTxBytes = (float)TrafficStats.getTotalTxBytes()/(float)1048576;  // Sent
float mobRxBytes = (float)TrafficStats.getMobileRxBytes()/(float)1048576;
float mobTxBytes = (float)TrafficStats.getMobileTxBytes()/(float)1048576;
float wifiRxBytes = totalRxBytes - mobRxBytes;
float wifiTxBytes = totalTxBytes - mobTxBytes;  

但我无法找出从特定日期或一个月获得此数据的方法吗?请帮忙。任何指针将不胜感激。 感谢。

2 个答案:

答案 0 :(得分:4)

首先,TrafficStats.getTotalRxPackets()

  

返回自设备启动以来收到的数据包数。

TrafficStats.getTotalTxPackets()

相同

此课程对获取月份统计信息没有帮助。

我建议使用API​​ 23解决方案:

NetworkStatsManager

此类可以获取每个设备或每个包的统计信息。特别有用的功能是:

NetworkStatsManager.querySummaryForDevice()

期望测量开始时间为第三参数,结束时间为第四参数。

可以找到示例项目here。它显示了如何获取NetworkStatsManager的访问权,要求适当的运行时权限。

此解决方案仅为API 23 +。

如果您真的想使用TrafficStats,那么创建一个每小时都会得到TrafficStats.getTotalRxPackets()结果的服务,计算差异,将其保存在每天不同行的数据库中。

答案 1 :(得分:0)

我同意R. Zagorski,但我有一个不同的方法。

使用TrafficStats获取/发送的数据包数量,从中减去最后一个数量,然后使用SharedPreferences和最后一个数量保存。现在,要处理设备重启,请始终检查最后一次计数是否大于当前数量。如果是,则将最后一个金额重置为0.此外,记录月份开始的时间。月份结束后,不要忘记将计数重置为0!

如果您希望跟踪上个月的计数,请使用列表。当月份结束时,将总金额添加到月份编号索引处的数组中。另外,请记住第一个索引是0而不是1.因此,您必须将数组偏移1值才能直接使用月份数来查询列表。

这比R. Zagorski的想法(也非常好)更有优势,它可以从api级别8使用,因为它是TrafficStats的最小值。

希望我帮助过:D