You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 14中获取前台应用功能失效问题求助

Android 14中UsageStatsManager无法获取最新前台应用数据问题

问题背景

此前在所有Android版本中均能成功检测前台应用,但在Android 14中,UsageStatsManager无法返回完整的最新应用使用数据。

前台应用检测方式

方式1:基于UsageEvents事件查询

通过查询指定时间范围内的应用使用事件,根据ACTIVITY_RESUMED(Android Q及以上)或MOVE_TO_FOREGROUND(低版本)事件确定前台应用,代码实现如下:

UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
String fgApp = null;
UsageEvents usageEvents = usageStatsManager.queryEvents(time - MyTime.MINUTE_MILLIS, time);
UsageEvents.Event event = new UsageEvents.Event();
while (usageEvents.hasNextEvent()) {
    usageEvents.getNextEvent(event);
    // MOVE_TO_FOREGROUND 从Android Q(API 29)开始被弃用,推荐使用ACTIVITY_RESUMED
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        if (event.getEventType() == UsageEvents.Event.ACTIVITY_RESUMED) {
            fgApp = event.getPackageName();
        }
    } else { // 低版本使用MOVE_TO_FOREGROUND
        if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
           fgApp = event.getPackageName();
        }
    }
}
return fgApp;

方式2:基于UsageStats的getLastTimeUsed()方法

通过获取UsageStats列表,比较各应用的getLastTimeUsed()时间戳,以此判断当前前台应用。

Android 14中的失效情况

上述两种方法在Android 14中均失效:

  • UsageStatsManager返回的数据并非最新
  • getLastTimeUsed()匹配的应用与实际前台应用不符(例如数据显示Nexus Launcher在前台,实际运行的是YouTube)

后续处理

查阅Android 14官方行为变更文档,未找到相关说明,已确认这是Android 14中UsageStatsManager的问题,并在Google问题跟踪器提交了包含最小复现示例的bug报告,若遇到相同问题,可点赞支持该报告。

内容的提问来源于stack exchange,提问作者Jorn Rigter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:05:27