android判断应用是否在前台

第一种思路是如果该应用在运行,则拿到那个应用进程的信息,然后用这个等式
appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND

来判断它是否在前台。


 
 
</pre><pre code_snippet_id="655671" snippet_file_name="blog_20150429_4_9223919" name="code" class="java">	/**
	 * 程序是否在前台运行
	 * 
	 * @return
	 */
	public static boolean isAppOnForeground(Context context) {
		ActivityManager activityManager = (ActivityManager) context
				.getApplicationContext().getSystemService(
						Context.ACTIVITY_SERVICE);
		String packageName = context.getApplicationContext().getPackageName();

		List<RunningAppProcessInfo> appProcesses = activityManager
				.getRunningAppProcesses();// 在后台运行的程序
		if (appProcesses == null)
			return false;

		for (RunningAppProcessInfo appProcess : appProcesses) {
			// The name of the process that this object is associated with.
			if (appProcess.processName.equals(packageName)
					&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
				return true;
			}
		}

		return false;
	}


第二种是利用getRunningTasks拿到最近运行的一个activity task的信息,按照getRunningTasks的api介绍:

Return a list of the tasks that are currently running, with the most recent being first and older ones after in order.

说明存放task的机制是类似于栈的,所以这个方法拿到的顺序是 “最近加进来的task先被拿到,最先加进去的task被压在栈底最后才被拿到”。

而这个方法的完整声明是:

public List<RunningTaskInfo> getRunningTasks(int maxNum)

传进去的参数是最多拿多少个task,那我们这里只拿最新的一个task就可以。


拿到最新的一个task,然后又拿这个task最顶端的那个activity,即

tasks.get(0).topActivity

如果这个activity的包名是我们当前程序的名字,说明这个程序目前就是在前台了。

	/**
	 * 判断当前应用程序处于前台还是后台
	 * 
	 * @return 后台为true,前台为false
	 */
	public static boolean isApplicationBroughtToBackground(final Context context) {
		ActivityManager am = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningTaskInfo> tasks = am.getRunningTasks(1);
		if (!tasks.isEmpty()) {
			ComponentName topActivity = tasks.get(0).topActivity;
			if (!topActivity.getPackageName().equals(context.getPackageName())) {
				return true;
			}
		}
		return false;
	}


无码无真相。

http://download.csdn.net/detail/aishang5wpj/8645505

你可能感兴趣的:(android判断应用是否在前台)