【问题标题】:Android UsageStatsManager works in activity, but returns empty in bounded serviceAndroid UsageStatsManager 在活动中工作,但在有界服务中返回空
【发布时间】:2016-05-13 03:05:48
【问题描述】:

我有一个活动和有界的服务。在activity.OnCreate() 中,我打印了usagestats,它工作正常。我尝试了太多东西来获取 boundedservice 中的使用统计信息,但我做不到。这里有一些场景,我测试过

1)Activity.Oncreate: 调用 usageStatsManager.queryAndAggregateUsageStats(startTime, endTime); 我得到一张充满了usageStats的地图。不错

2)后台服务,周期性完成OnStartCommand后,调用usageStatsManager.queryAndAggregateUsageStats(startTime, endTime);得到空map。 糟糕。 (这里我使用了来自有界服务的上下文)

3)在绝望的尝试中,我使用了来自服务的回调并调用了活动来调用相同的 usageStatsManager.queryAndAggregateUsageStats(startTime, endTime);,它再次获得了空地图。 糟糕。 (这里我使用了从活动中出来的上下文)

在上述所有场景中,我在手机上验证了该应用有权获取应用使用数据。

我在 androidmanifest.xml 中有以下条目来启动服务

 <service android:name="CENSORED.main.SmartBoundedService"  />

为什么项目符号 2 和 3 中的场景返回空的使用情况统计信息?我觉得我尝试了太多东西,并且可能对有限服务如何与 android 系统服务交互缺乏一些概念性的理解。

我的 UI 在 mainactivity 上运行,所有逻辑都在有界服务中运行。关于有界服务与意图服务应如何获得 android 系统服务是否有任何限制/指南(我假设没有)

任何讨论,即使它没有直接回答我的问题,也会提供信息和赞赏

【问题讨论】:

  • 请不要发布真实的应用程序包。我已经为你删掉了。

标签: android


【解决方案1】:

android 不跟踪前台或后台服务时间。但是,从 API Level 29 开始,前台服务时间是通过以下方式跟踪的:

UsageStats.getTotalTimeForegroundServiceUsed()  

这在 API 级别 29 之前不可用。

您需要通过事件自行跟踪使用时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多