Android UsageStatsManager产生错误的输出?
我使用它来生成应用程序使用状态。我对所选时间间隔的理解是,对于Android UsageStatsManager产生错误的输出?,android,usage-statistics,usagestatsmanager,Android,Usage Statistics,Usagestatsmanager,我使用它来生成应用程序使用状态。我对所选时间间隔的理解是,对于年度时间间隔,它为开始时间和结束时间持续时间之间的每个包聚合每个年度的数据。同样,它应该在每周和每天的时间间隔内工作 对于每周的,,我的代码和输出如下所示 代码: 但是,如果我对上述代码使用INTERVAL.DAILY,我只得到前三行。我的间隔足够大,它应该包含此间隔之间所有包的所有数据 Pkg = com.example.newappusagestatistics, beginTime 05/21/2015 17:00:00, en
年度
时间间隔,它为开始时间
和结束时间
持续时间之间的每个包聚合每个年度
的数据。同样,它应该在每周
和每天
的时间间隔内工作
对于每周的,,我的代码和输出如下所示
代码:
但是,如果我对上述代码使用INTERVAL.DAILY
,我只得到前三行。我的间隔足够大,它应该包含此间隔之间所有包的所有数据
Pkg = com.example.newappusagestatistics, beginTime 05/21/2015 17:00:00, endTime= 05/21/2015 17:59:18, lastTime = 05/21/2015 17:59:18, totalTime = 3484
Pkg = com.android.launcher, beginTime 05/21/2015 17:00:00, endTime= 05/21/2015 17:59:18, lastTime = 05/21/2015 17:59:18, totalTime = 27
Pkg = com.android.browser, beginTime 05/21/2015 17:00:00, endTime= 05/21/2015 17:15:27, lastTime = 05/21/2015 17:15:27, totalTime = 43
我是否做错了什么,或者我对累计间隔的理解不正确?任何帮助都将不胜感激。谢谢
Edit1
在查看了android存储在/data/system/usagestats文件夹中的stats文件后,我发现了两个用于每日统计的文件,一个用于每周统计的文件,如下所示
每日档案1
<usagestats version="1" endTime="59366071">
<packages>
<package lastTimeActive="59366071" package="com.example.newappusagestatistics" timeActive="4064908" lastEvent="1"/>
<package lastTimeActive="59366020" package="com.android.launcher" timeActive="813728" lastEvent="2"/>
<package lastTimeActive="927475" package="com.android.browser" timeActive="43838" lastEvent="2"/>
</packages>
每日档案2
<usagestats version="1" endTime="86395657">
<packages>
<package lastTimeActive="86395657" package="com.example.newappusagestatistics" timeActive="7916365" lastEvent="3" />
<package lastTimeActive="85743386" package="com.android.launcher" timeActive="1064651" lastEvent="2" />
<package lastTimeActive="78961499" package="com.android.browser" timeActive="24715" lastEvent="2" />
<package lastTimeActive="78063875" package="com.android.sdksetup" timeActive="1194161" lastEvent="3" />
<package lastTimeActive="78928555" package="com.android.camera" timeActive="40775" lastEvent="2" />
<package lastTimeActive="83715390" package="com.android.settings" timeActive="97012" lastEvent="2" />
<package lastTimeActive="78461328" package="com.android.systemui" timeActive="4162" lastEvent="2" />
</packages>
周报
<usagestats version="1" endTime="145761729">
<packages>
<package lastTimeActive="145761729" package="com.example.newappusagestatistics" timeActive="11981273" lastEvent="1" />
<package lastTimeActive="145761678" package="com.android.launcher" timeActive="1878379" lastEvent="2" />
<package lastTimeActive="87323133" package="com.android.browser" timeActive="68553" lastEvent="2" />
<package lastTimeActive="78063875" package="com.android.sdksetup" timeActive="1194161" lastEvent="3" />
<package lastTimeActive="78928555" package="com.android.camera" timeActive="40775" lastEvent="2" />
<package lastTimeActive="83715390" package="com.android.settings" timeActive="97012" lastEvent="2" />
<package lastTimeActive="78461328" package="com.android.systemui" timeActive="4162" lastEvent="2" />
</packages>
整个数据似乎都搞砸了。对于同一个浏览器应用程序,每日存储的结果不同,每周存储的结果不同。这可能是一团糟。你不能相信queryUsageStats的结果
在我的例子中,调用
queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, today)
显示过去七天的结果并调用
queryUsageStats(UsageStatsManager.INTERVAL_DAILY, few-days-ago, today)
仅显示今天的结果。几天前和今天是指示日期的时间(毫秒)。
检查今天的结果显示,某个应用程序的使用情况缺失,而今天晚些时候使用的其他应用程序则存在 根据谷歌发布的文档
()
该系统以每个应用程序为基础收集使用情况数据,并按每天、每周、每月和每年的间隔汇总数据。系统保存此数据的最长持续时间如下:
每日数据:7天
每周数据:4周
月度数据:6个月
年度数据:2年
如果您想获得7天以上的统计数据,请将时间间隔从interval_DAILY更改为interval_WEEKLY或interval_YEARLY。
下面是关于这一点的更多细节
我建议您检查最后4个不可见条目的结束时间。虽然我不确定,但从输出来看,Android似乎考虑了结束时间,这使得它无法在输出中可见。在理解UsageManager输出方面有什么进展吗?我也弄不懂。/data/system/usagestats中的文件与我可以通过queryUsageStats从应用程序输出到日志的事件不匹配。编辑:因此,/data/system/usagestats/文件的更新频率不一定与事件频率一致。从@schuberm开始,奇怪的重叠时间段也来了!有人发现了什么吗?最后一个答案帮助我理解了为什么数据给了我错误的结果。真是糟糕的文档!海尔科,这是意料之中的。您的第一个时间戳0是很久很久以前的事了。所以你最后得到的是最后7天,因为这是安卓将数据保留的时间。
queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, today)
queryUsageStats(UsageStatsManager.INTERVAL_DAILY, few-days-ago, today)