2011-03-16 17 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

相关问题