Liên quan đến "2. Làm thế nào ứng dụng nền của tôi có thể biết ứng dụng hiện đang chạy ở nền trước là gì."
KHÔNG sử dụng getRunningAppProcesses()
phương pháp này vì điều này trả về tất cả các loại rác hệ thống từ kinh nghiệm của tôi và bạn sẽ nhận được nhiều kết quả có RunningAppProcessInfo.IMPORTANCE_FOREGROUND
. Sử dụng getRunningTasks()
thay thế
Đây là mã tôi sử dụng trong dịch vụ của mình để xác định ứng dụng nền hiện tại, nó thực sự dễ dàng:
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);
Đó là nó, sau đó bạn có thể dễ dàng truy cập chi tiết của ứng dụng / hoạt động nền trước:
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = AppService.this.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
Điều này yêu cầu một sự cho phép bổ sung trong menifest hoạt động và hoạt động hoàn hảo.
<uses-permission android:name="android.permission.GET_TASKS" />