我正在尝试制作一个后台服务,该服务应该测量各种应用程序的流量使用情况,以便能够向用户显示哪些应用程序消耗最多的数据流量。
我发现 Spare Parts 应用程序正是这样做的,但在 1.6 Dell Streak 设备上安装它后,我总是收到“网络使用情况”的“没有可用的电池使用数据”。这个功能在备件中是否有效?
另外,我找不到可用的备件源代码。
https://android.googlesource.com/platform/development/+/froyo-release/apps/SpareParts
看起来已经过时或不完整。 (?)
但备件似乎可以测量例如每个应用程序的 CPU 使用情况。它如何在未root的手机上做到这一点?
我对如何测量每个应用程序的流量的一般想法是定期检查
"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,如何获取当前显示的活动(在前台)的信息?
但似乎这是关于测试,而不仅仅是在非 root Android 设备上运行的 3d 派对服务。
我们可以得到正在运行的活动ActivityManager.getCurrentTasks()
,但其中任何一个都可以成为焦点。出于安全考虑,Android 架构师似乎明确不希望 3d 方应用程序知道哪个应用程序具有焦点
(see http://android.bigresource.com/Track/android-zb2mhvZX4/).
有没有解决的办法?
另外,如果我不仅想检测哪些活动消耗了流量,还想检测哪些服务,我可以使用以下命令获取所有当前正在运行的服务ActivityManager.getCurrentSerives()
甚至查看每一个是否处于前台模式(不像 Android 需要资源时被抛出)。但这并没有给我带来任何帮助。
有任何想法吗?