我正在尝试确定用户当前可见的应用程序。为此,我使用该activityManager.getRunningAppProcesses()
方法。
我知道 Android 5.1.1 不支持该方法 - 这没关系。
一开始它就像魅力一样,我正在遍历 RunningAppProcessInfos 列表并检查其重要性。
tl; dr获取当前前台进程并防止误报的正确方法是什么?列表的顺序是如何完成的 - API 说它没有指定。有没有办法正确订购它们?
我做了什么:
不幸的是,ActivityManager 返回的列表在每个设备上都不同。一些设备返回多个重要性为 100(即 FOREGROUND)的信息,即使该进程当前不可见。
这导致了我有很多误报的问题。例如,我用 facebook 对其进行了测试,并在每次 facebook 处于前台时创建了一个 toast。我切换到主页,所以我的启动器应该是前台进程。大约 10 秒钟后,facebook 再次以 FOREGROUND 重要性出现在列表中(它既不打开也不可见),我得到了误报。
我认识到某些设备按最近的进程排序列表。所以我决定尝试以下方法:
ActivityManager.RunningAppProcessInfo appProcess = appProcesses.get(0);
final String processName = appProcess.processName;
final String packageName = removeProcessSuffix(processName);
if (appProcess.importance == FOREGROUND || appProcess.importance == VISIBLE){
//do something, like the toast
}
使用appProcesses.get(0); 我只检查第一个元素,错误就消失了。不再有误报。
但是,现在在某些设备上,我根本无法获得前台进程。因为他们不会以任何方式对列表进行排序。例如,一些 4.2 索尼智能手机就是其中的一部分。我得到了列表,但当前真正可见的进程在索引 11 左右。
我不知道该怎么做才能获得当前的前台进程,而不会出现误报。
获取当前前台进程并防止误报的正确方法是什么?列表的顺序是如何完成的 - API 说它没有指定。有没有办法正确订购它们?
谢谢!