Android TrafficStats后台服务?

时间:2012-01-05 21:17:05

标签: android sqlite

我想获得一些关于在日期间隔之间获取3G数据统计数据的帮助。 据我所知,我应该使用TrafficStats(Android api 2.2或更高版本)。我想将此信息保存到SQLite表中,以便每月显示应用程序的统计信息:

  

间隔日期:01/01/2012 - 31/01/2012

     

谷歌地图 - 1,5 Mb

     

Google Talk - 0,9 Mb

     

Facebook应用程序 - 5,6 Mb

所以,我想我应该使用后台服务。这是最好的方法吗?我该如何尝试在后台服务中执行此操作?您认为我应该如何在SQLite中保存信息?

1 个答案:

答案 0 :(得分:2)

(@ Pabloku,对不起这个答案来得太晚了,希望它仍然会有所帮助)

首先,如果您希望获得各个应用的流量统计信息,但仅限于3G,则无法使用公共API。 Android提供TrafficStats.getUidTxBytes(int)TrafficStats.getUidRxBytes(int)作为公共API来获取应用程序使用的总字节数,但没有(公共)通过接口将它们分开。

假设这不会破坏你的一天,这里有一个伪代码算法,用于完成你提到的其余部分:

  1. 根据需要设置闹钟(使用AlarmManager)作为范围的开头,并存储这些值(可能是在数据库中)。原因:您可能需要将这些现有的TrafficStats值减去偏移量,如果它们是>您的日期范围开始时为0。
  2. 同时为范围的结束设置闹钟。
  3. 创建BroadcastReceiver以接收ACTION_SHUTDOWN
  4. BroacastReceiver中,请在关机时记下您的应用的TrafficStats。原因:TrafficStats将在每次重启时重置。
    • 如果这是自启动以来的第一次关闭:减去初始偏移并存储该最终值(小心删除初始偏移量)
    • 否则,报告后报告的任何值都是准确的。
  5. 触发结束闹钟后,请记下该点的TrafficStats,然后添加之前收集的所有统计信息
    • (如果电话在开始和结束之间从不重启,只需执行endStats - startStats)。
  6. 祝你好运!