4

所以我们都知道 ActivityManager 上的 getRecentTasks() 和 getRunningTasks() 现在已被弃用,并且会在 Android L 及更高版本的设备上返回缩减的结果集。

Android L 中 getRunningTasks 的替代方案

https://code.google.com/p/android-developer-preview/issues/detail?id=29

但是,我正在尝试找到一种解决方案,以使我的 App Locker 应用程序在 Android L 上保持活动状态。我需要顶部 Activity 的包名称,以便在用户打开/启动锁定的应用程序时显示锁定屏幕。

它与这个应用程序非常相似:https: //play.google.com/store/apps/details?id=com.domobile.applock&hl=en

目前我正在使用这段代码:

  ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager
                .getRunningTasks(1);
        ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
        String activityOnTop = ar.topActivity.getPackageName();

但它在 Android L 中不起作用,所以我不确定到底该怎么做......

我怎样才能在 Android L 中实现这样的东西?

4

3 回答 3

1

不幸的是,在 Android 5.0 中没有等价物:无法获得最高的活动,也无法在实时启动新的应用程序/活动时获得任何回调。

于 2014-10-21T16:49:41.993 回答
1

请参考此 链接。

我希望它对你有所帮助,在我的项目中它可以工作。谢谢。

于 2015-05-19T10:53:51.487 回答
-2

试试 Android L 的这行代码

ActivityManager activityManager = (ActivityManager) getSystemService (Context.ACTIVITY_SERVICE);

String packageName = activityManager.getRunningAppProcesses().get(0).processName;

请注意,这仅适用于 Lollipop 设备。如果您需要任何平台支持,请添加以下代码。

if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP)
{
String packageName = activityManager.getRunningAppProcesses().get(0).processName;
}
else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
{
String packageName =  ProcessManager.getRunningForegroundApps(getApplicationContext()).get(0).getPackageName();
}
else
{
String packageName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();

}
于 2016-04-16T11:23:29.743 回答