【发布时间】:2020-05-04 16:21:42
【问题描述】:
问题
我想每周或每月检索UsageStats 的列表。但是,输出通常具有重叠的间隔,例如4 月 29 日星期三到 5 月 4 日星期一,当我请求月度数据时(请参阅下面时间戳的最新结果)。
所以我的问题是:如何使用 UsageStatsManager 清晰地获取特定周(例如周一 - 周日)或月份(例如 4 月 1 日 - 4 月 31 日)的使用情况统计信息?
背景
在我的 Android 应用程序中,我使用 UsageStatsManager 来检索每周/每月在前台的总时间。 This post 关于如何使用 UsageStatsManager 已经非常有帮助,以及 this post 关于 UsageStatsManager 产生错误的每日结果(我正在使用该方法进行日常使用统计,效果很好现在)。
问题
当我尝试检索每周/每月间隔的使用情况统计信息时,问题就开始了。 UsageStatsManager documentation 声明
使用数据按时间间隔汇总:天、周、月和年。
但查询 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 查询周/月/年的开源应用程序示例都会非常有帮助。提前致谢。
【问题讨论】:
-
您是否使用 queryEvents 函数进行每日统计?
-
是的,但那部分(如前所述)很好。我遇到的麻烦是查询周数和月数。
标签: android usage-statistics usagestatsmanager