判断当前界面是否是桌面

         在安卓开发当中,很多情况下我们需要判断当前的界面是否为桌面。比如,像360手机卫士悬浮框,当前台没有应用打开的时候,显示悬浮框。如果有应用打开的时候,就关闭悬浮框。这种时候,判断当前的界面是否为桌面就派上用场了。

        1. 首先我们要获取所有的正在运行的任务,因为安卓系统是多任务的,所以我们获取的正在运行的任务应该是多个:

ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
        2.下一步我们得找出前台运行的任务,最前面的就是前台正在运行的任务:

RunningTaskInfo info = rti.get(0);
        3.接下来我们需要找到所有的桌面应用(第4步即获取所有桌面应用的方法),如果有一个桌面应用在前台运行,那么就表示桌面显示中

return getHomes().contains(info.topActivity.getPackageName());   

        4.桌面应用的启动必须要满足以下两个条件:1.action为android.intent.action.MAIN     2.category包含android.intent.category.Home ,所以下面的方法就可以获得获得所有属于桌面应用的应用包名称

	private List<String> getHomes() {
		List<String> names = new ArrayList<String>();
		PackageManager packageManager = this.getPackageManager();
		Intent intent = new Intent(Intent.ACTION_MAIN);
		intent.addCategory(Intent.CATEGORY_HOME);
		List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(
				intent, PackageManager.MATCH_DEFAULT_ONLY);
		for (ResolveInfo ri : resolveInfo) {
			names.add(ri.activityInfo.packageName);
		}
		return names;
	}

          下面是完整的代码:

	/*
	 * 判断当前界面是否是桌面
	 */
	public boolean isHome() {
		// TODO Auto-generated method stub
		ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
		// android系统是支持多任务的,下面的意思就是:找到所有的正在运行的任务,
		List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);

		/*
		 * 找到正在运行的任务后,还得找出前台运行的任务,最前面的就是前台正在运行的任务 
		 * RunningTaskInfo info = runningTaskInfos.get(0);
		 */

		// 如果当前获取的桌面应用程序的包名里面,包含有当前正在前台运行的桌面应用的包名,则表示桌面显示
		return getHomes().contains(rti.get(0).topActivity.getPackageName());
	}

	/*
	 * 获得属于桌面的应用的应用包名称
	 * 
	 * @return 返回包含所有包名的字符串列表 属于桌面应用必须要满足以下两个条件:
	 * 1.action为android.intent.action.MAIN
	 * 2.category包含android.intent.category.Home
	 */
	private List<String> getHomes() {
		List<String> names = new ArrayList<String>();
		PackageManager packageManager = this.getPackageManager();
		Intent intent = new Intent(Intent.ACTION_MAIN);
		intent.addCategory(Intent.CATEGORY_HOME);
		List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(
				intent, PackageManager.MATCH_DEFAULT_ONLY);
		for (ResolveInfo ri : resolveInfo) {
			names.add(ri.activityInfo.packageName);
		}
		return names;
	}


      

你可能感兴趣的:(android,应用,判断当前页面是否为桌面)