【问题标题】:Using UsageStatsManager to get the foreground app使用 UsageStatsManager 获取前台应用
【发布时间】:2016-08-16 09:39:40
【问题描述】:

我正在尝试使用 UsageStatsManager 在带有 Marshmallow 的 Nexus 5 上获取前台应用程序。我记得它曾经可以工作,但由于某种原因,我现在得到了包/类名称的空字符串。

这是我的实现

public String[] getForegroundPackageNameClassNameByUsageStats() {
    String packageNameByUsageStats = null;
    String classByUsageStats = null;
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
        UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService("usagestats");                       
        final long INTERVAL = 1000;
        final long end = System.currentTimeMillis();
        final long begin = end - INTERVAL;
        final UsageEvents usageEvents = mUsageStatsManager.queryEvents(begin, end);
        while (usageEvents.hasNextEvent()) {
            UsageEvents.Event event = new UsageEvents.Event();
            usageEvents.getNextEvent(event);
            if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
                packageNameByUsageStats = event.getPackageName();
                classByUsageStats = event.getClassName();
                Log.d(TAG, "packageNameByUsageStats is" + packageNameByUsageStats + ", classByUsageStats is " + classByUsageStats);
            }
        }
    }
    return new String[]{packageNameByUsageStats,classByUsageStats};
}

由于某种原因,它没有进入 while 循环,即 usageEvents.hasNextEvent() 为 false。因此,它返回 null 包/类名。

知道我做错了什么吗?

谢谢。

【问题讨论】:

  • 大多数人认为它有效,因为在测试时喜欢经常切换应用程序以快速检查它是否有效。当前台应用程序的最后一次更改是在很久以前时,问题就来了。

标签: android usagestatsmanager


【解决方案1】:

好的,所以我发现一旦将间隔设置为 10000 而不是 1000,它就可以工作。显然1s的间隔太小了。

【讨论】:

    【解决方案2】:

    我自己也在用这个。我认为只有当应用程序进入前台时才会更新使用统计信息。因此,如果前台应用程序在您的“开始”时间戳之前到达前台(并停留),那么您将不会得到它。 :(

    另一方面,当你使用很久以前你会得到一个巨大的列表,你只需要最长的时间来确定前台应用程序。

    所以我要做的是创建 3 个不同的时间:1 分钟前、1 小时前和 12 小时前。

    当我在 1 分钟内得到一个空列表时,我会在 1 小时内重复请求,依此类推。这样我大部分时间都在前台。但我从来没有让它一直工作。

    我真的很怀念只询问包管理器哪个应用程序是前台的旧方式(在android 5之前),新方式有点乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 2016-01-23
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多