2011-03-16 86 views
4

我正在嘗試做一個後臺服務,它應該測量各種應用程序的流量使用情況,以便能夠向用戶顯示哪些應用程序消耗大部分數據流量。查找其他Android應用程序生成多少網絡流量

我發現Spare Parts應用程序確實如此,但在1.6戴爾Streak設備上安裝後,我總是會在「網絡使用情況」中收到「沒有電池使用情況數據」。這個功能是否適用於備件? 此外,我找不到備件的工作源代碼。

https://android.googlesource.com/platform/development/+/froyo-release/apps/SpareParts
看起來已經過時或不完整。 (?)

但備件似乎測量,例如每個應用的CPU使用率。它是如何在無根手機上進行的?

我怎麼每個應用的流量可以衡量總體思路是要定期檢查

"sys/class/net/" + sWiFiInterface + "/statistics/rx_bytes"

"sys/class/net/" + sWiFiInterface + "/statistics/tx_bytes"

"sys/class/net/" + sMobileInterface + "/statistics/rx_bytes"

"sys/class/net/" + sMobileInterface + "/statistics/tx_bytes"

文件,看看哪些應用目前有重點,因此mos可能導致生成的網絡流量。

不幸的是我找不到如何獲得當前有重點的應用程序。

我發現這一點:

Android, how to get information on which activity is currently showing (in foregorund)?

,但似乎它是關於測試,在無根的Android設備上運行不僅僅是一個3D第三方服務。

我們可以通過ActivityManager.getCurrentTasks()得到哪些活動正在運行,但其中任何一個都可以成爲焦點。看起來Android的架構師明確不希望3D派對應用程序知道什麼應用程序的焦點,因爲安全問題

(請參閱http://android.bigresource.com/Track/android-zb2mhvZX4/)。

有沒有辦法解決這個問題?

另外,如果我想不僅能探測到哪些活動吃起來的流量,但也什麼樣的服務,我可以 ActivityManager.getCurrentSerives() 獲得所有當前正在運行的服務,甚至看到每一個,如果它在前臺模式(不同於拋出如果Android需要資源的話)。但是這再次沒有讓我走得太遠。

任何想法?

回答

3

您可以使用ActivityManager.getRunningAppProcesses調用來檢測當前的前臺應用程序。它將返回一個RunningAppProcessInfo記錄列表。要確定哪個應用程序在前臺檢查RunningAppProcessInfo.importance字段的等於RunningAppProcessInfo.IMPORTANCE_FOREGROUND

但是,要調用ActivityManager.getRunningAppProcesses()方法的軟件必須在UI線程中執行。只需在後臺線程中調用它(例如通過AsyncTask),它將返回正確的結果。請查詢my post瞭解更多詳情。

+1

非常感謝您的回覆!我想這解決了我的問題的很大一部分。我剛剛發現NetSentry應用[(源代碼)](http://code.google.com/p/netsentry/source/checkout),它甚至可以在沒有後臺服務的情況下進行流量測量。現在試圖弄清楚我是否可以以同樣的方式做到這一點,並嘗試將流量歸因於前臺的活動。 – iseeall 2011-03-17 11:37:59

相關問題