2012-01-05 103 views
1

我想獲得有關獲取3G數據統計日期間隔的一些幫助。 據我所知,我應該使用TrafficStats(Android api 2.2或更高版本)。我想這些信息保存到一個SQLite表中顯示的應用程序月度統計數據:Android TrafficStats後臺服務?

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

谷歌地圖 - 1,5 MB

谷歌對話 - 0,9 MB

的Facebook應用程序 - 5,6 MB

所以,我想我應該用一個後臺服務。這是最好的方法嗎?我應該如何嘗試在後臺服務中做到這一點?你認爲我應該如何將信息保存在SQLite中?

回答

2

(@Pabloku,對不起這個答案來得這麼晚,希望這將仍然有一定的幫助)

首先,如果你正在尋找讓各個應用的流量統計,但僅限於3G,它的不可能使用公共API。 Android提供TrafficStats.getUidTxBytes(int)TrafficStats.getUidRxBytes(int)作爲公共API來獲取應用程序使用的總字節數,但沒有任何(公共)按接口將它們分開。

假設這不會毀掉你的一天,這裏是怎麼做的,你提什麼剩下的僞代碼算法:

  1. (使用AlarmManager)如有必要,設定報警爲您範圍的開始,並存儲這些值(大概是在一個數據庫中)。原因:如果您的日期範圍開始時間大於0,您可能需要減去這些現有的TrafficStats值。
  2. 還爲您的範圍結束設置一個警報。
  3. 創建BroadcastReceiver以接收ACTION_SHUTDOWN
  4. 在您的BroacastReceiver中,在關機時記下您的應用程序的TrafficStats。原因:每次重新啓動時,TrafficStats都會重置。
    • 如果這是第一次停產,因爲開始:減去你的初始偏移和存儲終值(小心除去初始偏移)
    • 否則,任何值報告將是自開機準確。
  5. 一旦您的最終觸發報警,記下TrafficStats在這一點上,並添加所有之前收集的統計
    • (如果莫名其妙的電話也沒有起點和終點之間的重新啓動,只是做endStats - startStats)。

祝你好運!

+0

非常感謝anddev84!答案是遲到了,但現在我看到,我用它的「算法」是你提出的相同:) – Pabloku 2013-12-19 10:55:51