En ce qui concerne "2. Comment mon application en arrière-plan peut savoir ce que l'application en cours d'exécution dans le premier plan."
Ne PAS utiliser l' getRunningAppProcesses()
méthode, car cela renvoie à toutes sortes de système d'ordures à partir de mon expérience et vous obtiendrez plusieurs résultats qui ont RunningAppProcessInfo.IMPORTANCE_FOREGROUND
. Utiliser getRunningTasks()
au lieu
C'est le code que j'utilise dans mon service afin de déterminer l'application de premier plan, il est vraiment facile:
ActivityManager am = (ActivityManager) AppService.this.getSystemService(ACTIVITY_SERVICE);
// The first in the list of RunningTasks is always the foreground task.
RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
C'est elle, alors vous pouvez facilement accéder aux informations détaillées de l'avant-plan app/activité:
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = AppService.this.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
Cela nécessite une permission supplémentaire dans l'activité menifest et fonctionne parfaitement.
<uses-permission android:name="android.permission.GET_TASKS" />