我正在尝试制作一个背景服务,该服务应衡量各种应用程序的流量使用情况,以便能够向用户展示应用大多数数据流量的用户。

我发现备件应用程序完全可以做到这一点,但是在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,如何获取有关当前正在显示的活动的信息(Foregorund)?

但这似乎是关于测试的,而不仅仅是在非根系Android设备上运行的3D派对服务。

我们可以得到哪些活动正在运行 ActivityManager.getCurrentTasks(), ,但是他们中的任何一个都可以成为重点的人。似乎Android Architects明确不希望3D Party Apps知道应用程序的重点,因为安全问题

(看 http://android.bigresource.com/track/android-zb2mhvzx4/).

有没有解决的办法?

另外,如果我不仅要检测到哪些活动吞噬了流量,还可以使用哪些服务,我可以通过目前的所有运行服务ActivityManager.getCurrentSerives()甚至在每个人处于前景模式(如果Android都需要资源的情况下),也可以看到它。但这又不会带给我任何远。

有任何想法吗?

有帮助吗?

解决方案

您可以检测到当前的前景应用程序 ActivityManager.getRunningAppProcesses 称呼。它将返回 RunningAppProcessInfo 记录。确定哪个应用在前景检查 RunningAppProcessInfo.importance 平等的字段 RunningAppProcessInfo.IMPORTANCE_FOREGROUND.

但是要呼吁 ActivityManager.getRunningAppProcesses() 方法必须在UI线程中执行。只需在背景线程中调用它(例如,通过asynctask),它将返回正确的结果。查看 我的帖子 有关其他详细信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top