gpt4 book ai didi

android - getRunningTasks 在 Android L 中不起作用

转载 作者:IT王子 更新时间:2023-10-28 23:43:38 26 4
gpt4 key购买 nike

在 Android L 中,Google 已禁用 getRunningTasks。现在它只能返回自己的应用程序任务和主页启动器。我无法再获得其他应用程序任务。我们的应用需要该方法来确定当前的热门应用。任何人有另一种方法来做到这一点?

我在 Google 上搜索过,除此之外没有更多关于此的主题: https://code.google.com/p/android-developer-preview/issues/detail?id=29

最佳答案

对于我最近参与的一个项目,我还需要检测某些应用程序何时启动。我所有的研究都导致了 getRunningTasks 方法,该方法从 Lollipop 开始被弃用。然而,令我惊讶的是,我发现一些应用程序锁定应用程序仍然可以在 Lollipop 设备上运行,所以他们一定想出了一个解决方案来解决这个问题。所以我挖得更深一些。这是我发现的:

    1. 在 L 之前的设备上,他们仍然使用 getRunningTasks
    1. 在 L 设备上,它们使用 getRunningAppProcesses,它返回当前在设备上运行的进程列表。你可能会想“好吧,那没用”。每个 processInfo 都有一个称为重要性的属性。当应用成为顶级 Activity 时,其 processInfo 重要性也会更改为 IMPORTANCE_FOREGROUND。所以你可以过滤掉那些不在前台的进程。从每个 ProcessInfo 中,您还可以询问它加载的包的列表。然后,您可以检查列表是否包含与应用程序尝试“ protected ”时相同的包。

一些用于检测默认日历应用何时启动的示例代码:

public class DetectCalendarLaunchRunnable implements Runnable {

@Override
public void run() {
String[] activePackages;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
activePackages = getActivePackages();
} else {
activePackages = getActivePackagesCompat();
}
if (activePackages != null) {
for (String activePackage : activePackages) {
if (activePackage.equals("com.google.android.calendar")) {
//Calendar app is launched, do something
}
}
}
mHandler.postDelayed(this, 1000);
}

String[] getActivePackagesCompat() {
final List<ActivityManager.RunningTaskInfo> taskInfo = mActivityManager.getRunningTasks(1);
final ComponentName componentName = taskInfo.get(0).topActivity;
final String[] activePackages = new String[1];
activePackages[0] = componentName.getPackageName();
return activePackages;
}

String[] getActivePackages() {
final Set<String> activePackages = new HashSet<String>();
final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
activePackages.addAll(Arrays.asList(processInfo.pkgList));
}
}
return activePackages.toArray(new String[activePackages.size()]);
}
}

注意:getRunningAppProcesses 也用于调试或“构建面向用户的流程管理 UI”。不确定谷歌是否会以与 getRunningTasks 类似的方式关闭此后门。

所以不,你不能再获得 topActivity 了。但只要稍加修改,您就可以获得类似的结果。

关于android - getRunningTasks 在 Android L 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24625936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com