Android M:如何获取当前前台活动包名称(来自服务)

时间:2015-11-07 09:45:00

标签: android activity-manager

很容易从Android L上的ActivityManager服务获取正在运行的任务列表,并首先返回当前活动任务。但它不再适用于Android M,返回列表仅包含我的app任务。有没有办法解决它?

我的代码:

List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = activityManager.getRunningAppProcesses();
for (int i = 0; i < runningAppProcessInfos.size(); i++) {
    ActivityManager.RunningAppProcessInfo runningAppProcessInfo = runningAppProcessInfos.get(i);
    if (runningAppProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
        return runningAppProcessInfo.pkgList[0];
    }
}

2 个答案:

答案 0 :(得分:12)

您可以使用下面的代码并获取当前的前台活动包名称。

   if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            UsageStatsManager usm = (UsageStatsManager) getSystemService("usagestats");
            long time = System.currentTimeMillis();
            List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,
                            time - 1000 * 1000, time);
                    if (appList != null && appList.size() > 0) {
                        SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
                        for (UsageStats usageStats : appList) {
                            mySortedMap.put(usageStats.getLastTimeUsed(),
                                    usageStats);
                        }
                        if (mySortedMap != null && !mySortedMap.isEmpty()) {
                            currentApp = mySortedMap.get(
                                    mySortedMap.lastKey()).getPackageName();
                        }
                    }
        } else {
                ActivityManager am = (ActivityManager) getBaseContext().getSystemService(ACTIVITY_SERVICE);
                currentApp = am.getRunningTasks(1).get(0).topActivity .getPackageName(); 

        }

修改

将此权限添加到Manifest文件中。

<uses-permission android:name="android.permission.GET_TASKS" /> 
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />

注意

确保您需要在设备中配置自定义设置以获取可以使用设置&gt;配置的输出。安全&gt;使用权限的应用&gt;然后启用您的应用权限

答案 1 :(得分:0)

请在Android M中尝试这一行。这对我有用

String packageName =  ProcessManager.getRunningForegroundApps(getApplicationContext()).get(0).getPackageName();

检查以下链接以获取其他Android平台支持。

https://stackoverflow.com/a/36660429/4554069