Berkenaan dengan "2. Bagaimana aplikasi latar belakang saya dapat mengetahui aplikasi apa yang sedang berjalan di latar depan."
JANGAN menggunakan getRunningAppProcesses()
metode ini karena ini mengembalikan semua jenis sampah sistem dari pengalaman saya dan Anda akan mendapatkan banyak hasil yang memilikinya RunningAppProcessInfo.IMPORTANCE_FOREGROUND
. Gunakan getRunningTasks()
sebagai gantinya
Ini adalah kode yang saya gunakan dalam layanan saya untuk mengidentifikasi aplikasi latar depan saat ini, sangat mudah:
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);
Itu saja, maka Anda dapat dengan mudah mengakses detail aplikasi / aktivitas latar depan:
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = AppService.this.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
Ini membutuhkan izin tambahan dalam menifest aktivitas dan bekerja dengan sempurna.
<uses-permission android:name="android.permission.GET_TASKS" />