"2. Arka plan uygulamam, o anda ön planda çalışan uygulamanın ne olduğunu nasıl bilebilir?"
getRunningAppProcesses()
Yöntemi KULLANMAYIN çünkü bu benim deneyimlerime göre her türlü sistem çöpünü döndürür ve birden fazla sonuç alırsınız RunningAppProcessInfo.IMPORTANCE_FOREGROUND
. getRunningTasks()
Bunun yerine kullanın
Bu, mevcut ön plan uygulamasını tanımlamak için hizmetimde kullandığım kod, gerçekten çok kolay:
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);
İşte bu, daha sonra ön plan uygulamasının / etkinliğinin ayrıntılarına kolayca erişebilirsiniz:
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = AppService.this.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
Bu, etkinlik menüsünde ek bir izin gerektirir ve mükemmel çalışır.
<uses-permission android:name="android.permission.GET_TASKS" />