UsageStatsManager 没有返回正确的每周或每月结果。

问题描述 投票:0回答:1

问题

我想检索一个 UsageStats 每星期或每月。但是,输出的数据经常有重叠的时间间隔,例如:4月29日星期三到5月04日星期一,我要求的是月度数据(见下面时间戳的最新结果)。

所以我的问题是。 我如何使用 UsageStatsManager 清晰地获取特定周(如周一至周日)或月(如 4 月 1 日至 4 月 31 日)的使用统计?

背景介绍:我的问题是:如何使用UsageStatsManager干净利落地获取特定周或月的使用量统计(如4月1日-4月31日)?

在我的安卓应用中,我使用的是 UsageStatsManager 以检索每星期月在前台的总时间。本篇文章 关于如何使用 UsageStatsManager 已经很有帮助,还有 此职位 关于 UsageStatsManager 产生错误的每日结果(我正在使用这种方法来统计每日使用量,现在工作正常)。

问题是

当我试图检索每周每月的使用统计时,麻烦就开始了。在 UsageStatsManager文档 指出

使用数据被汇总到时间间隔中:天、周、月和年。

但我从查询 UsageStatsManager 得到的输出结果却大不相同。. 一个例子说明我如何检索过去两个月的 UsageStats 对象列表。

    Calendar endCalendar = Calendar.getInstance();
    long endTime = endCalendar.getTimeInMillis();
    Calendar startCalendar = Calendar.getInstance();
    startCalendar.add(Calendar.MONTH, -2); // since two months.
    long startTime = startCalendar.getTimeInMillis();
    UsageStatsManager usm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
    List<UsageStats> result = usm.queryUsageStats(UsageStatsManager.INTERVAL_MONTHLY, startTime, endTime);

然而,当我查看 List<UsageStats> result 并记录包裹的时间戳和它们的前台时间,我得到了一堆时间戳,但它们根本不是以月为单位的。我从联系人应用中检索到的时间戳的一个例子。result:

ForegroundTime: 4447 first=Wed Mar 04 03:53:28 GMT+01:00 2020 last=Fri Mar 06 11:46:18 GMT+01:00 2020
ForegroundTime: 176383 first=Fri Mar 06 11:46:18 GMT+01:00 2020 last=Tue Mar 17 07:53:54 GMT+01:00 2020
ForegroundTime: 14337 first=Tue Mar 17 07:53:54 GMT+01:00 2020 last=Tue Mar 17 20:03:31 GMT+01:00 2020
ForegroundTime: 0 first=Tue Mar 17 20:03:31 GMT+01:00 2020 last=Fri Mar 20 14:32:26 GMT+01:00 2020
ForegroundTime: 0 first=Fri Mar 20 14:32:26 GMT+01:00 2020 last=Mon Mar 23 00:12:11 GMT+01:00 2020
ForegroundTime: 0 first=Mon Mar 23 04:27:16 GMT+01:00 2020 last=Mon Mar 23 17:00:29 GMT+01:00 2020
ForegroundTime: 0 first=Mon Mar 23 17:00:29 GMT+01:00 2020 last=Sat Mar 28 00:52:10 GMT+01:00 2020
ForegroundTime: 0 first=Sat Mar 28 00:52:10 GMT+01:00 2020 last=Fri Apr 03 06:45:08 GMT+02:00 2020
ForegroundTime: 81481 first=Fri Apr 03 06:45:08 GMT+02:00 2020 last=Thu Apr 09 18:04:05 GMT+02:00 2020
ForegroundTime: 0 first=Thu Apr 09 18:04:05 GMT+02:00 2020 last=Thu Apr 16 10:31:23 GMT+02:00 2020
ForegroundTime: 157189 first=Thu Apr 16 10:31:23 GMT+02:00 2020 last=Sun Apr 26 02:10:31 GMT+02:00 2020
ForegroundTime: 0 first=Sun Apr 26 02:10:31 GMT+02:00 2020 last=Wed Apr 29 13:21:12 GMT+02:00 2020
ForegroundTime: 43516 first=Wed Apr 29 13:21:12 GMT+02:00 2020 last=Mon May 04 17:45:43 GMT+02:00 2020

它似乎被随机地分割成不同的时间段。

如果能提供任何链接解释为什么 UsageStatsManager 有这种行为,或者提供一个使用 UsageStatsManager 查询 weeks-months-years 的开源应用程序的例子,将非常有帮助。先谢谢你。

android usage-statistics usagestatsmanager
1个回答
0
投票

我可能无法解决这个问题,但我建议使用以下方法来解决这个问题。查询事件 函数来查询所有的数据--日数据、周数据和月数据。

用这个函数查询周数据与用它查询日数据类似。(你提到你已经实现了日常数据的功能)

至于月度数据,由于事件在系统中的保存时间为一周左右,所以不能直接使用该功能。你需要将使用数据存储在本地数据库中,并从数据库中查询。

© www.soinside.com 2019 - 2024. All rights reserved.