第一步
只有系统级应用才有权限实时监听前天应用,所以需要将你的应用设置成系统级别的应用;
- 如何将应用设置成系统级应用
- 清单文件中加上android:sharedUserId=“android.uid.system”;
- 使用系统的签名文件;
第二步
使用ActivityTaskManager监听前台应用的变化;
代码如下:
activityTaskManager = ActivityTaskManager.getService()
taskListener = AppUseTaskListener()
try {
activityTaskManager.registerTaskStackListener(taskListener)
} catch (e: RemoteException) {
e.printStackTrace()
}
public class AppUseTaskListener extends TaskStackListener {
private static final String TAG = "AppUseTaskListener";
@Override
public void onTaskStackChanged() throws RemoteException {
Log.d(TAG, "onTaskStackChanged");
List<ActivityManager.RunningTaskInfo> tasks = activityTaskManager.getTasks(1, true, false);
if(tasks != null && !tasks.isEmpty()) {
Log.i(TAG, tasks.toString());
String pkgName = tasks.get(0).topActivity.getPackageName();
Log.d(TAG, "onTaskStackChanged: pkgName:"+pkgName);
...
} else {
Log.d(TAG, "onTaskStackChanged: tasks == null || tasks.isempty");
}
}
}
设置完监听后,当系统前台应用发生变化后,就可以接收到返回了;