Ich versuche, die derzeit sichtbare Anwendung für den Benutzer zu ermitteln. Um dies zu tun, verwende ich die activityManager.getRunningAppProcesses()
Methode.Get (real) Vordergrund-Prozess mit activityManager.getRunningAppProcesses()
Ich weiß, dass die Methode nicht unter Android 5.1.1 unterstützt wird - das ist in Ordnung.
Am Anfang funktionierte es wie Charme, ich bin durch die Liste von RunningAppProcessInfos iterieren und auf die Wichtigkeit prüfen.
tl; dr Was ist die richtige Methode, um aktuellen Vordergrundprozess zu erhalten und falsche Postives zu verhindern? Wie ist die Reihenfolge der Liste - die API sagt, es ist nicht angegeben. Gibt es eine Möglichkeit, sie richtig zu bestellen?
Was ich getan habe:
Leider ist die Liste der Activitymanager zurück auf jedem Gerät unterscheidet. Einige Geräte geben mehrere Infos mit der Wichtigkeit 100 (FOREGROUND) zurück, auch wenn der Prozess derzeit nicht sichtbar ist.
Dies verursachte das Problem, dass ich viele falsche Positive hatte. Zum Beispiel habe ich es mit Facebook getestet und einen Toast erstellt, jedes Mal, wenn Facebook im Vordergrund ist. Ich wechselte zu Home, also sollte mein Launcher den Vordergrundprozess haben. Es war für 10 Sekunden, danach, facebook erschien mit der Bedeutung FOREGROUND in der Liste wieder (es war nicht offen und nicht sichtbar) und ich bekam eine falsch positive.
Ich erkannte, dass einige Geräte die Liste durch den letzten Prozess an der Spitze ordnen. Also beschloss ich, die folgende Vorgehensweise, um zu versuchen:
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
}
Mit appProcesses.get (0); Ich untersuche nur das erste Element und der Fehler ist weg. Keine falschen positiven Ergebnisse mehr.
Aber, jetzt auf einigen Geräten wir nicht bekommen, den Vordergrundprozess überhaupt nicht mehr. Weil sie die Liste in keiner Weise ordnen. Zum Beispiel einige 4,2 Sony Smartphones sind einige der Kandidaten. Ich bekomme die Liste, aber der wirklich aktuell sichtbare Prozess ist bei Index 11 oder so.
Ich habe keine Ahnung, was zu tun ist, um den aktuellen Vordergrundprozess zu erhalten, ohne falsche Positive.
Was ist die richtige Methode, um aktuellen Vordergrundprozess zu erhalten und falsche Postives zu verhindern? Wie ist die Reihenfolge der Liste - die API sagt, es ist nicht angegeben. Gibt es eine Möglichkeit, sie richtig zu bestellen?
Vielen Dank!
Das sieht aus wie ein Betrüger von http://stackoverflow.com/questions/2166961/determining-the-current-foreground-application-from-a-background-task-or-service – alzee
Ich habe nicht getestet, aber das sieht so aus als würde es dir helfen: http://stackoverflow.com/a/33886313/4973904 –
@ ÁlissonMorais Nun, danke zuerst für die Antwort, aber hast du die komplette Frage gelesen? Ich kann das erste Element der zurückgegebenen Liste nicht verwenden, da die Liste bei etwa 30% der Geräte nicht sortiert ist. – JacksOnF1re