我正在尝试为用户确定当前可见的应用程序。为此,我使用activityManager.getRunningAppProcesses()
方法。
我知道该方法在Android 5.1.1中不受支持--这没问题。
在一开始,它的工作方式就像咒语一样,我遍历了RunningAppProcessInfos列表,并检查了它的重要性。
tl;dr获取当前前台进程并防止误报的正确方法是什么?列表的顺序是如何完成的-- API说没有指定。有没有办法对它们进行正确的排序?
我所做的:
不幸的是,ActivityManager返回的列表在每个设备上都是不同的。一些设备返回多个重要性为100 (前台)的信息,即使进程当前不可见。
这导致了我有很多误报的问题。例如,我用facebook进行了测试,每次facebook出现在前台时,我都会创建一个吐司。我切换到Home,所以我的启动器应该是前台进程。大概10秒之后,facebook再次以重要的前景出现在列表中(它既不是开放的,也不是可见的),我得到了一个假阳性。
我意识到一些设备会根据最新的进程在顶部对列表进行排序。因此,我决定尝试以下方法:
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说没有指定。有没有办法对它们进行正确的排序?
谢谢!
https://stackoverflow.com/questions/34208624
复制相似问题