如何获取Android L的包名

时间:2014-10-21 16:32:20

标签: java android android-5.0-lollipop activity-manager

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

Alternative to getRunningTasks in Android L

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

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

与此应用非常相似: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中实现类似的功能?

3 个答案:

答案 0 :(得分:1)

不幸的是,在Android 5.0中没有相应的内容:它无法获得最多的活动,也无法在实时启动新的应用程序/活动时获得任何回调。

答案 1 :(得分:1)

请参阅此link.

我希望它对你有所帮助,在我的项目中它起作用。谢谢。

答案 2 :(得分:-1)

尝试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();

}