Android 5.1.1 und oben getRunningAppProcesses() gibt meine Anwendung Paket nur
Scheint es Google endlich geschlossen alle Türen für Sie immer die aktuelle Vordergrund-Anwendung Paket.
Nach dem Lollipop update, die getötet getRunningTasks(int maxNum)
und Dank diese Antwort, ich habe diesen code, um die Vordergrund-Anwendung-Paket seit Lollipop:
final int PROCESS_STATE_TOP = 2;
RunningAppProcessInfo currentInfo = null;
Field field = null;
try {
field = RunningAppProcessInfo.class.getDeclaredField("processState");
} catch (Exception ignored) {
}
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appList = am.getRunningAppProcesses();
for (RunningAppProcessInfo app : appList) {
if (app.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
app.importanceReasonCode == 0 ) {
Integer state = null;
try {
state = field.getInt( app );
} catch (Exception ignored) {
}
if (state != null && state == PROCESS_STATE_TOP) {
currentInfo = app;
break;
}
}
}
return currentInfo;
Android 5.1.1 und höher (6.0 Marshmallow), es scheint, getötet getRunningAppProcesses()
als gut. Es gibt jetzt eine Liste Ihrer eigenen Anwendung Paket.
UsageStatsManager
Können wir die neue UsageStatsManager
API als hier beschrieben aber es funktioniert nicht für alle Anwendungen. Einige system-Anwendungen wird die Rücksendung des Pakets
com.google.android.googlequicksearchbox
AccessibilityService (Dezember 2017: Werde gebannt für die Verwendung von Google)
Einige Anwendungen verwenden AccessibilityService
(wie sehen Sie hier), aber es hat einige Nachteile.
Gibt es eine andere Möglichkeit, die laufende Anwendung Paket?
Beachten Sie, dass einige große Anbieter haben entfernt die system-Aktivität, die Zugriff gewährt, die UsageStats API aus Ihren Geräten. Dies bedeutet, dass die apps auf diesen Geräten kann niemals der Erwerb der erforderlichen Erlaubnis.
Samsung einer von Ihnen. Das sind über 60% des Marktes.
Hier ist eine Karte aus dem android bug tracker zu diesem Thema: code.google.com/p/android-developer-preview/issues/...
Wenn ich parse die Ausgabe läuft
ps
in eine Schale und die Politik ist "fg"
und den Inhalt /proc/[pid]/oom_adj_score
gleich 0
dann die app wird die Vordergrund-Anwendung. Leider scheint es /proc/[pid]/oom_adj_score
ist nicht mehr lesbar auf Android 6.0. gist.github.com/jaredrummler/7d1498485e584c8a120eInformationsquelleAutor Lior Iluz | 2015-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um eine Liste der Laufenden Prozesse auf Android 1.6 - Android 6.0 können Sie diese Bibliothek verwenden, ich schrieb: https://github.com/jaredrummler/AndroidProcesses Der Bibliothek liest /proc zu bekommen process info.
Google hat deutlich eingeschränkten Zugriff auf /proc in Android-Nougat. Um eine Liste der Laufenden Prozesse auf Android-Nougat benötigen Sie UsageStatsManager oder root-Zugriff haben.
Klicken Sie auf die edit-history für frühere alternative Lösungen.
Tut mir Leid. War einfach nur neugierig. 🙁
Ich bin derzeit in den Prozess der Implementierung Ihrer Lösung in meiner app. Scheint zu funktionieren gut so weit wie ich das beurteilen kann
Wenn Sie möchten, zu Sortieren, basierend auf ein anderes Attribut, machen
Process
implementierenComparable
ab und setzen diecompareTo
Methode. Dann, wenn SieCollections.sort(processesList)
zu verwenden, wird die Reihenfolge, die Sie angegeben.Ich denke, Jared wird der Verweis auf diesen link: https://source.android.com/devices/tech/security/selinux/index.html
InformationsquelleAutor Jared Rummler
Verwenden Sie diese Methode für die erste Aufgabe Vordergrund.
U brauchen eine System-Berechtigung "android:get_usage_stats"
WENN Benutzer aktivieren Sie diese unter Einstellungen -> Sicherheit-> app-Nutzung zugreifen. Nach, dass u erhalten Aufgabe Vordergrund. Ähnliche Sauberes matser von Cheetahamobile
google play link
UsageStatsManager
. Samsung hat entfernt Anfragen und es ist ziemlich ärgerlich für einen Benutzer zum erteilen der Berechtigung system.Ich habe getestet, moto e2 Gerät. Es ist in Ordnung, und ja, wir implementieren müssen, um diese Berechtigung. wir alle vor denselben Problemen. Wir alle müssen wirklich ein besserer Ansatz. Glück dude
Dieser Ansatz funktioniert nicht, zumindest auf dem LG G3, weil es keine "Einstellungen -> Sicherheit-> App-Nutzung access" - Menüpunkt
Das ist keine Antwort auf meine Frage. Darüber hinaus keine neue info ist in dieser Antwort.
Sie arbeiten gut, aber nicht richtig in die marshmallow. wenn die Meldung kam dann Laufenden Prozess werden die Paket-Benachrichtigung erhalten. tatsächlich app läuft nicht im hintergrund oder Vordergrund :(. brauchen Lösung.
InformationsquelleAutor Tarun Sharma
Werfen Sie einen Blick auf https://github.com/ricvalerio/foregroundappchecker, könnte es sein, was Sie brauchen. Enthält Beispiel-code, und nimmt der Schmerz erspart, zu implementieren cross-version Vorder-Detektor.
Hier sind zwei Beispiele:
Oder regelmäßig zu überprüfen:
Immer wieder ein
null
packageName..hast du das verlangen die erforderlichen Berechtigungen?
InformationsquelleAutor rvalerio
Google beschränkt sich diese Funktionalität für system-apps nur. Wie berichtet wurde in einer bug-ticket, müssen Sie die REAL_GET_TASKS Erlaubnis zum Zugang dorthin.
"Berechtigungen mit der Schutz-Signatur, privilegierte oder signatureOrSystem werden nur gewährt, um system apps. Wenn eine app eine regelmäßige nicht-system-app, werden Sie nie in der Lage zu nutzen diese Berechtigungen. " sagen Sie android studio.. viel Glück zu verhandeln mit Google akzeptiert zu werden als eine "system-app".
InformationsquelleAutor Ilya Gazman
Nur werfen eine mögliche Optimierung zur was ich mir vorstelle ist ein schwer kopieren-einfügen-bit-code zur Erkennung der top-die meisten Anwendung auf Android-M.
Diese
Kann vereinfacht werden zu diesem
Fand ich mich mithilfe dieses Codes in 2-Sekunden-loop, und fragte mich, warum ich eine komplexe Lösung, die O(n*log(n)), wenn eine einfachere Lösung war in den Sammlungen.max() ist O(n).
InformationsquelleAutor bstar55
Dann den Dienst starten und der app den Bedienungshilfen auf Ihrem Gerät
Einstellung->Eingabehilfen->App
auf diesem service.
InformationsquelleAutor Ram Bhawan
//Das Funktioniert Schneller als obige Antwort.
InformationsquelleAutor Dilavar M
Bitte versuchen Sie es zu nutzen
getRunningServices()
stattgetRunningAppProcesses()
Methode.InformationsquelleAutor Joe