【问题标题】:I want to use UsageStatsManager in my service我想在我的服务中使用 UsageStatsManager
【发布时间】:2021-09-08 10:34:37
【问题描述】:

我有一个应用程序可以跟踪其他应用程序的屏幕时间。我有一项服务应该在用户在特定应用程序上花费 X 时间后发出通知。为了跟踪其他应用程序,我使用了一个服务。当我自己的应用程序打开时,其他应用程序屏幕时间的详细信息正确显示,但是当我的应用程序进入后台时,详细信息没有更新(它们与我自己的应用程序打开时保持相同),但尽快当我重新打开我的应用程序时,详细信息会更新。为什么 UsageStatsManager 在后台时不能正常工作?

        var appList = usm.queryUsageStats(
            UsageStatsManager.INTERVAL_DAILY,
            System.currentTimeMillis() - 1000 * 3600 * 24,
            System.currentTimeMillis()
        )

我的清单中有以下代码

    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />
        <service android:enabled="true" android:name=".MyService" />
    </application>

【问题讨论】:

  • 您使用的是前台服务还是后台服务。
  • @NitishChaudhary 后台服务
  • 后台服务仅在应用打开时运行。当应用程序进入后台时,服务将停止。要在后台运行服务,您需要切换到前台服务link
  • “但是当我的应用程序进入后台时,详细信息不会更新”——后台服务只运行大约一分钟,然后在 Android 8 及更高版本上停止。
  • 改成了前台服务,但还是没有为不同的应用更新屏幕时间。

标签: android kotlin service usagestatsmanager


【解决方案1】:

UsageStatsManager 不会更新,除非应用程序进入后台。 您可以通过添加当前运行的应用程序进入前台的当前时间和时间戳的差异来存档。
详情参考这个答案:How to count app usage time while app is on foreground?

【讨论】:

  • 谢谢!这正是我所需要的。
猜你喜欢
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多