0

我正在尝试获取有关特定日期(有时是当前日期)中应用程序使用情况的统计信息。

现在我正在使用它UsageStatsManager

Calendar now = Calendar.getInstance();

Calendar initialDate = Calendar.getInstance();
initialDate.set(Calendar.DAY_OF_YEAR, i);
initialDate.set(Calendar.HOUR_OF_DAY, 0);
initialDate.set(Calendar.MINUTE, 0);
initialDate.set(Calendar.SECOND, 0);

long initialTime = initialDate.getTimeInMillis();

Calendar finalDate = Calendar.getInstance();
finalDate.set(Calendar.DAY_OF_YEAR, j);
finalDate.set(Calendar.HOUR_OF_DAY, 0);
finalDate.set(Calendar.MINUTE, 0);
finalDate.set(Calendar.SECOND, 0);

long finalTime = finalDate.getTimeInMillis();

UsageStatsManager mUsageStatsManager = (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE);

List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,
                initialTime, finalTime).stream()
                .filter(usageStats -> usageStats.getTotalTimeInForeground() > 5000 && usageStats.getLastTimeUsed() > initialTime)
                .collect(Collectors.toList());

根据UsageStatsManager 文档,使用数据被聚合为时间间隔:天、周、月和年。问题是在我尝试过的情况下它不是在午夜,所以我最终从间隔前一天和后一天得到了几个小时。就我而言,每天的时间间隔是15:36,我猜是第一次安装操作系统的时间。

我认为 Digital Wellbeing 使用了相同的方法,但在应用程序本身中,我可以按小时获取信息,并且通过比较我在应用程序中获得的信息与 Digital Wellbeing 中的信息并不完全相同:我的应用程序显示了更多信息某些应用程序中的分钟,总使用量大约多 2 小时。

如果 Digital Wellbeing 可以访问这些信息,我想我也可以访问。如果不是这样,有没有办法提高准确性并将其限制在我建立的范围内?我总是要求一整天,从午夜到午夜。一天中没有奇怪的时段,除了查询当天,即从 00:00 到当天的当前时间。我尝试将间隔更改为INTERVAL_DAILY但没有任何改变。

4

0 回答 0