Android L 5.0版本获取topActivity的方法

Android L版本中getRunningTasks已经失效

需要添加权限:

<uses-permission android:name="android.permission.GET_TASKS"/>

public static String getTopPkgName(Context context) {
        ActivityManager am = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
            Field field = null;
            try {
                field = RunningAppProcessInfo.class
                        .getDeclaredField("processState");
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }
            List<ActivityManager.RunningAppProcessInfo> processInfos = am
                    .getRunningAppProcesses();
            for (RunningAppProcessInfo app : processInfos) {
                if (app.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND
                        && app.importanceReasonCode == 0) {
                    Integer state = null;
                    try {
                        state = field.getInt(app);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    }
                    if (state != null && state == 2) {
                        if (app.pkgList.length > 0) {
                            Mlog.d(TAG, "---L getTopPkgName: " + app.pkgList[0]);
                            return app.pkgList[0];
                        }
                    }
                }
            }
        } else {
            List<RunningTaskInfo> runningTasks = am.getRunningTasks(1);
            if (runningTasks != null && runningTasks.size() > 0) {
                RunningTaskInfo runningTaskInfo = runningTasks.get(0);
                ComponentName topActivity = runningTaskInfo.topActivity;
                String packageName = topActivity.getPackageName();
                Mlog.d(TAG, "---getTopPkgName: " + packageName);
                return packageName;
            }
        }
        Mlog.d(TAG, "---getTopPkgName: NULL");
        return null;
    }

 参考:

http://stackoverflow.com/questions/24625936/getrunningtasks-doesnt-work-in-android-l

http://blog.csdn.net/wulianghuan/article/details/46348043

原文地址:https://www.cnblogs.com/afluy/p/4745824.html