我想要使用Usagestats来检索用户使用数据...但我收到了错误的数据...我希望每天使用"从00:00:00到23:59: 59"
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_WEEK, -1); \\ the missing line
UsageStatsManager uStateManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
List<UsageStats> usageList = uStateManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, cal.getTimeInMillis(), System.currentTimeMillis());
当我使用.getTotalTimeInForeground()时,我得到的结果与预期不同?你能帮助我设置正确的方法因为我尝试了很多不同的方法而没有得到预期的结果吗? 感谢
答案 0 :(得分:0)
这个问题有点陈旧,但我现在已经与UsageStatsManager
进行了很长一段时间的斗争,并找到了一些可能对其他人有用的东西。这里有一些提示可以帮助您解决这个问题。
Calendar.getInstance()
返回“Calendar
对象,其日历字段已使用当前日期和时间初始化。” (link)因此,如果您希望在这些时间获得每日使用量,则需要手动将它们设置为午夜。 UsageStatsManager
使用UTC时间来存储他们的所有数据。所以在查询时,请务必调整时间。 queryUsageStats
的每日使用情况统计数据完全不可靠。即使使用UTC时间调整,似乎根据一天中的时间它会发回昨天的统计数据而不是今天的统计数据。 关于在查询此方法时如何确定要考虑哪些统计信息的文档并不多,这使得它非常不可靠。如果计算每日统计数据,我强烈建议您使用UsageEvent
代替并手动计算时间。计算出的时间与queryUsageStats
返回的内容相匹配(假设该方法返回正确的统计数据),这对我来说足够证明它对于前景跟踪足够可靠。还有更多关于如何做到这一点on this question,我在那里添加了我的实现(link)。