เกี่ยวกับ "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" />