Относительно «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" />