Що стосується "2. Як моя фонова програма може знати, що програма, яка зараз працює на передньому плані."
НЕ використовуйте getRunningAppProcesses()
метод, оскільки це повертає всілякі сміття з мого досвіду, і ви отримаєте декілька результатів RunningAppProcessInfo.IMPORTANCE_FOREGROUND
. Використовуйте getRunningTasks()
замість цього
Це код, який я використовую в своїй службі, щоб визначити поточну програму переднього плану, її дуже просто:
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);
Ось це, ви можете легко отримати доступ до деталей програми / діяльності переднього плану:
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = AppService.this.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
Для цього потрібен додатковий дозвіл у діяльності найменш і працює чудово.
<uses-permission android:name="android.permission.GET_TASKS" />