Что касается «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" />