如何解决如何使用 UsageStatsManager.queryUsageStats(...)?
背景
我想要有关我公司平板电脑上不同应用的使用数据。最佳解决方案跨越最多的时间。我读到 here 说我应该能够通过一些 UsageStatsManager 查询获取过去两年的数据。
我尝试过的
我认为 UsageStatsManager.queryAndAggregateUsageStats(..) 可以解决问题,但我发现它最多只能返回大约一周的时间间隔。 由于“聚合”查询不起作用,我尝试了此代码,因此可以明确声明存储桶大小:
val appStats = statsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,Long.MAX_VALUE)
我尝试使用多个不同的时间间隔,包括:
val appStats = statsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,curTime - TimeUnit.DAYS.toMillis(730),curTime)
我能得到的最长间隔大约是一周。
示例日志:
Name: com.example.myusagestatsmanagertestapp
--> Beginning: Tue Jul 20 10:16:41 CDT 2021
--> Ending: Mon Jul 26 21:20:47 CDT 2021
--> Time in FG: 186
我现在在哪里
我一定是做错了什么,因为 INTERVAL_YEARLY 常量没有被弃用。但是,我从其他帖子(例如 this one 或 this one)中推断出此 API 是粗略的。
我的下一步是通过 UsageStatsManager.queryEvents(..) 构建我自己的统计数据,这看起来更加一致和清晰。
问题
- 有什么问题?
- UsageStatsManager 数据是否值得信任?
规范和代码
我的设备是 Android 9.0 Samsung galaxy Active Tab2。
这是完整的功能!
private fun getIndividualAppUsageDuration(
statsManager: UsageStatsManager,curTime: Long
): Map<String,Long> {
val appMap: MutableMap<String,Long> = mutableMapOf()
val apps = statsManager.queryUsageStats(UsageStatsManager.INTERVAL_MONTHLY,curTime - TimeUnit.DAYS.toMillis(60),curTime)
for(app in apps) {
appMap[app.packageName] = app.totalTimeInForeground
Log.d("TAG_1","...\n" +
"Name: ${app.packageName}\n" +
"--> Beginning: ${stringifyMilli(app.firstTimeStamp)}\n" +
"--> Ending: ${stringifyMilli(app.lastTimeStamp)}\n" +
"--> Time in FG: ${TimeUnit.MILLISECONDS.toMinutes(app.totalTimeInForeground)}" )
}
return appMap
}
我使用的权限!
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。