Il semble que Google ait finalement fermé toutes les portes pour obtenir le package d'application actuel au premier plan.
Après la mise à jour de Lollipop, qui a tué getRunningTasks(int maxNum)
et grâce à cette réponse , j'ai utilisé ce code pour obtenir le package d'application au premier plan depuis 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 et supérieur (6.0 Marshmallow), semble-t-il, également tué getRunningAppProcesses()
. Il renvoie maintenant une liste de votre propre package d'application.
UsageStatsManager
Nous pouvons utiliser la nouvelle UsageStatsManager
API comme décrit ici mais cela ne fonctionne pas pour toutes les applications. Certaines applications système renverront le même package
com.google.android.googlequicksearchbox
AccessibilityService (décembre 2017: Google va être interdit d'utilisation par Google)
Certaines applications l'utilisent AccessibilityService
(comme vu ici ) mais cela présente quelques inconvénients.
Existe-t-il un autre moyen d'obtenir le package d'application en cours d'exécution?
ps
dans un shell et que la stratégie est "fg"
et le contenu de /proc/[pid]/oom_adj_score
égal, 0
l'application est l'application de premier plan. Malheureusement, il semble /proc/[pid]/oom_adj_score
ne plus être lisible sur Android 6.0. gist.github.com/jaredrummler/7d1498485e584c8a120e