Android使用情况统计信息返回奇怪的结果

时间:2018-11-27 22:56:19

标签: android usagestatsmanager

我正在使用以下方法查看结果:

List<UsageStats> usageStatsList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,  startTime,endTime);

其中startTime在午夜之后,而endTime在同一天午夜之前。

示例结果:

Pkg:com.android.chrome 前台时间:6412秒 上次使用时间:美国太平洋夏令时间2018年4月19日星期四22:31:17


Pkg:com.instagram.android 前台时间:5415秒 上次使用时间:2018年4月19日星期四23:11:22


Pkg:com.android.chrome 前台时间:5304秒 上次使用时间:2018年4月19日星期四03:00:49


Pkg:com.instagram.android 前台时间:5202秒 上次使用时间:2018年4月19日星期四03:00:45

如您所见,即使某些情况下我最后一次使用的时间是在我指定的24小时间隔内,它也会为某些事情两次返回相同的程序包,并使用不同的时间。

我在这里查看了很多其他结果: Android UsageStatsManager producing wrong output?

How to use UsageStatsManager?

但似乎无法解决我的问题。

有人知道为什么会这样吗?似乎是时间相关的?尽管我当时睡着了,但最后一次使用的时间总是说凌晨3点才打包?

2 个答案:

答案 0 :(得分:2)

晚聚会。我已经看到许多关于此问题的线程,并且每个人似乎都对如何使用此API感到困惑。在自己为此奋斗了一段时间之后,我发现UsageStats是准确的,但是在幕后进行的操作却很违反直觉。

摘自UsageStatsManager.queryUsageStats()文档:

注意:时间范围的开始和结束时间可能会扩展到最接近的整个间隔时间。

事实证明,您提供给该方法的开始和停止时间通常都在您下方进行更改,以与每日间隔相匹配。您认为您正在查询最近15分钟的使用情况,但实际上是最近24小时的使用情况。

值得庆幸的是,该API至少为您提供了一种确定开始时间和停止时间更改为什么的方法。使用此方法的正确方法是始终检查使用getFirstTimeStamp()getLastTimeStamp()将范围转换为什么。

非常令人沮丧的结果是,您对间隔没有任何可靠的控制,这使得它在很多用例中都没有用。像其他人建议的那样,如果您需要精确度,则应该使用queryEvents()方法,不幸的是,这意味着需要一些人工工作才能汇总所需的适当事件。

答案 1 :(得分:0)

我建议您看看queryAndAggregateUsageStatsdocumentation)。

但是,我自己也遇到了UsageStats的一些问题,请在此处查看:https://issuetracker.google.com/issues/118564471