查找其他Android应用生成的网络流量

时间:2011-03-16 15:56:29

标签: android android-activity focus traffic measure

我正在尝试制作后台服务,该服务应该衡量各种应用程序的流量使用情况,以便能够向用户显示哪些应用程序消耗了大部分数据流量。

我发现Spare Parts应用确实如此,但在1.6 Dell 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"

文件以及查看当前具有焦点的应用,从而最有可能导致生成的网络流量。

不幸的是,我找不到如何让应用程序正在关注焦点。

我发现了这个:

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

但似乎是关于测试,而不仅仅是在非root用户设备上运行的3D派对服务。

我们可以使用ActivityManager.getCurrentTasks()获取正在运行的活动,但其中任何一个都可以是具有焦点的活动。由于安全问题,似乎Android架构师明确不希望3D派对应用知道应用程序有哪些重点

(见http://android.bigresource.com/Track/android-zb2mhvZX4/)。

有解决方法吗?

另外,如果我不仅要检测哪些活动会占用流量,还要检测哪些服务,我可以获取所有当前正在运行的服务 ActivityManager.getCurrentSerives() 甚至可以看到每个人是否处于前台模式(不像Android需要资源时被抛出)。但这再次对我没有任何影响。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以通过ActivityManager.getRunningAppProcesses电话检测当前的前台应用程序。它将返回RunningAppProcessInfo条记录列表。要确定哪个应用程序位于前台,请检查RunningAppProcessInfo.importance字段是否与RunningAppProcessInfo.IMPORTANCE_FOREGROUND相等。

但是必须在UI线程中执行调用ActivityManager.getRunningAppProcesses()方法的软件。只需在后台线程中调用它(例如通过AsyncTask),它将返回正确的结果。查看my post了解更多详情。