首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用Usage Stats获取前台活动?

是否可以使用Usage Stats获取前台活动?
EN

Stack Overflow用户
提问于 2020-12-07 20:12:46
回答 2查看 48关注 0票数 0

我找到了这个方法来获取前台活动:

代码语言:javascript
复制
public String getRecentActivity(Context context) { //I cut out the pre API 22 part of the method

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {

        UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);

        long time = System.currentTimeMillis();

        UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 30, System.currentTimeMillis() + (10 * 1000));
        UsageEvents.Event event = new UsageEvents.Event();
        while (usageEvents.hasNextEvent()) {
            usageEvents.getNextEvent(event);
        }

        if (!TextUtils.isEmpty(event.getPackageName()) && event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
            return event.getPackageName();
        }
    }
    return " ";
}

这就是问题所在:当有一个前台服务在运行时,这个方法返回一个空的包名,而不是前台活动的包名(即return " ";)。如何让它返回前台活动?有没有办法从usageEvents中过滤掉服务?

EN

回答 2

Stack Overflow用户

发布于 2020-12-07 21:49:25

如果使用queryUsageStates而不是quertEvent,我希望它能修复

代码语言:javascript
复制
public String getRecentActivity(){
        String mpackageName = "";
        UsageStatsManager usage = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
        long time = System.currentTimeMillis();
        List<UsageStats> stats = usage.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 30, time);
        if (stats != null) {
            SortedMap<Long, UsageStats> runningTask = new TreeMap<Long, UsageStats>();
            for (UsageStats usageStats : stats) {
                runningTask.put(usageStats.getLastTimeUsed(), usageStats);
            }

            if (runningTask.isEmpty()) {
                mpackageName = "";
            } else {
                mpackageName = runningTask.get(runningTask.lastKey()).getPackageName();
            }
        }
        return mpackageName;
    }
票数 1
EN

Stack Overflow用户

发布于 2020-12-08 07:21:07

如果有人想知道答案,我想出来了:

代码语言:javascript
复制
public String getRecentActivity(Context context) { //Only works for APIs above or equal to 22

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {

        UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);

        long time = System.currentTimeMillis();

        UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 30, System.currentTimeMillis() + (10 * 1000));
        UsageEvents.Event event = new UsageEvents.Event();
        String packageName = " ";
        while (usageEvents.hasNextEvent()) {
            usageEvents.getNextEvent(event);
            if (!TextUtils.isEmpty(event.getPackageName()) && event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND)
                packageName = event.getPackageName();
        }

        return packageName;
    }

    return " ";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65181534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档