最近在项目中需要在用户处于某一个指定的应用(非当前项目的应用)界面时,自动弹出提示窗口。为了判断触发时机,我们需要判断当前前台应用的包名,那么如何获取前台应用的包名呢?
一种很自然的思路是获取当前运行栈中栈顶的activity,然后获取该activity的包名,最后进行判断,于是有了下面的代码——
public static String getTopActivity(Context context) {
try {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//获取正在运行的task列表,其中1表示最近运行的task,通过该数字限制列表中task数目,最近运行的靠前
List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
if (runningTaskInfos != null && runningTaskInfos.size() != 0) {
return (runningTaskInfos.get(0).baseActivity).getPackageName();
}
} catch (Exception e) {
logger.error("栈顶应用:" + e);
}
return "";
}