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
相关产品推荐
相关产品推荐

