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

如何获取Amazon Fire TV Stick 4K Max前台运行应用的包名

问题:Amazon Fire TV Stick 4K Max(Android 9)获取前台应用包名

需要开发一款应用监控特定应用是否处于前台,但在该设备上,常规的UsageStatsManager和ActivityManager方法都无法正常获取其他应用的前台包名。


已尝试的方法

方法1:UsageStatsManager

该方法在其他Android 9设备上有效,但在Fire TV Stick 4K Max上无法返回正确结果:

public String packageInForeground() {
    // 获取UsageStatsManager
    UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);

    // 获取最近5秒的使用事件
    long currentTime = System.currentTimeMillis();
    List<UsageStats> usageStatsList = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, currentTime - 5000, currentTime);

    // 查找最新的使用事件
    UsageStats latestUsageStats = null;
    if (usageStatsList != null) {
        for (UsageStats usageStats : usageStatsList) {
            if (latestUsageStats == null || usageStats.getLastTimeUsed() > latestUsageStats.getLastTimeUsed()) {
                latestUsageStats = usageStats;
            }
        }
    }

    // 获取当前前台应用的包名
    String currentForegroundApp = latestUsageStats != null ? latestUsageStats.getPackageName() : "";
    Log.d("Service", "Current foreground app: " + currentForegroundApp);

    return currentForegroundApp;
}

方法2:ActivityManager

仅能获取自身应用的包名,切换到其他应用时无法获取目标包名:

public String packageInForeground() {
    ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
    String packageName = "";
    if (runningAppProcesses != null && runningAppProcesses.size() > 0) {
        for (ActivityManager.RunningAppProcessInfo processInfo : runningAppProcesses) {
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                packageName = processInfo.processName.split(":")[0];
                Log.d("LockService", "Package Name: " + packageName);
                break;
            }
        }
    }
    return packageName;
}

可行解决方案

针对Fire TV设备的定制化限制,推荐以下可靠方法:

1. 使用AccessibilityService

通过监听窗口状态变化获取前台应用包名,这是目前Fire TV设备上最有效的方式:

步骤1:在AndroidManifest中声明服务

<service
    android:name=".MyAccessibilityService"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/accessibility_service_config" />
</service>

步骤2:创建辅助服务配置文件

在res/xml/目录下新建accessibility_service_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeWindowStateChanged"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"
    android:description="@string/accessibility_service_description" />

步骤3:实现AccessibilityService类

public class MyAccessibilityService extends AccessibilityService {
    private String currentForegroundPackage;

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
            String packageName = event.getPackageName().toString();
            currentForegroundPackage = packageName;
            Log.d("Accessibility", "Foreground package: " + packageName);
            // 在此处触发你的应用监控逻辑
        }
    }

    @Override
    public void onInterrupt() {}

    public String getCurrentForegroundPackage() {
        return currentForegroundPackage;
    }
}

注意:用户需要在Fire TV的系统设置中,为你的应用手动开启辅助功能权限。

2. 监听Activity生命周期(局限性场景)

如果仅需监控与自身应用交互的前台状态,可以通过注册ActivityLifecycleCallbacks实现,但无法获取完全独立的第三方应用前台信息。


关键说明

Fire TV设备在系统层面限制了普通应用获取其他应用的前台状态,UsageStatsManager因设备定制化无法返回有效数据,AccessibilityService是目前最稳定的解决方案,唯一的代价是需要用户手动授权。

内容的提问来源于stack exchange,提问作者Chris Meinigmann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:46:06