如何在Android中跟踪应用程序的使用情况?如何检测活动启动时机?

25
我需要像AppUsage一样跟踪Android应用程序的使用情况(即跟踪应用程序启动次数和使用时间)。我的计划是在应用程序启动时记录开始时间,然后在应用程序暂停或停止时获取结束时间。在LogCat中,我可以看到Activity启动的日志。我已经查看了可用的系统广播,但不确定是否有任何广播会在每次启动活动时发送。基本上,我如何检测活动何时启动?
此外,Android还有一个内部可用的使用统计系统,可以在Spare Parts应用程序中找到,或者拨打*#*#4636#*#*(测试->使用统计)来查看。
3个回答

18
我们现在可以使用Android 5.0 API的android.app.usage API访问Android设备上的应用程序使用历史记录。该系统按每个应用程序收集使用数据,并将数据在日,周,月和年间隔内进行聚合。
对于每个应用程序,系统记录以下数据:
- 应用程序最后一次使用的时间 - 应用程序在该时间间隔(按天,周,月或年计)中处于前台的总时长 - 在一天内捕获组件(由软件包和活动名称标识)何时移至前台或后台的时间戳 - 捕获设备配置更改(例如,因旋转而更改设备方向时)的时间戳
参考资料:http://developer.android.com/reference/android/app/usage/package-summary.html

我可以使用UsageStats检查应用程序被使用了多少次吗? - Milan Gajera
1
但是'Context.USAGE_STATS_SERVICE'字段是从API 22(Android 5.1)开始添加的,那么在API 22之前如何获取这些统计数据呢? - Lim CHAN
1
那么这些数据是否可以在应用程序之间共享?我能否拥有自己的应用程序来跟踪其他应用程序的使用情况? - HelmBurger

6
基本上,我该如何检测活动启动时的情况?
你无法做到这一点。Android SDK 中没有“应用启动时间”或“应用暂停或停止时间”的内容。
你引用的应用程序可能在持续轮询 ActivityManager 上浪费大量 CPU 时间、RAM 和电池寿命。
请注意,如果您计划让其他人访问所跟踪的内容,那么您提议跟踪的内容可能涉及侵犯隐私的类型会引起麻烦,例如 CarrierIQ。

2
根据Android市场上的AppUsage描述,AppUsage几乎不消耗电量-只在您更改应用程序时记录,而不像其他应用程序每隔x秒检查一次!我不确定AppUsage是如何做到这一点的。这是一个推荐应用程序给用户的论文项目。其中一个要求是跟踪应用程序使用情况。 - sofiaguyang
2
@ Sofia:我会查看他们的应用程序,并向谷歌报告,如果他们正在利用安全漏洞。感谢您把这件事情带到我的注意下! - CommonsWare
2
在内部,Android 还有一个可用的使用统计系统,可以在 Spare Parts 应用程序中找到,或者当拨打 *#*#4636#*#* 时找到。测试 -> 使用统计 - sofiaguyang
21
“你不需要”并不是一个很好的回答。几乎任何事情都有合理的方法和用例,而提问者在问题本身中已经提供了一个例子。 - Nick
4
我同意,但这并不意味着答案是“不行”。相反,“Android团队没有为您提供易于使用的方法来做到这一点”,但在几乎所有情况下(例如,在早期版本的设备上进行日志扫描),当然存在非漏洞利用的方法。你说得对,这会对电池寿命和CPU使用造成压力,但这可能比“不行”更接近OP想要的答案。 - Nick
显示剩余4条评论

1
这可能不适合您的需求,但就我个人而言,在2023年我并不想做太多工作和头疼的事情,所以非常感谢 Firebase 团队提供免费的分析服务。 请点击此链接了解更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接