Android 判断当前介面是否是在桌面



     在移动开发中,经常遇到要判断当前介面是否是桌面的情况,网上有很多例子,我这里贴出,一则方便自己日后查询,二则方便给需要的码友们看。
     Android设备上,判断当前介面是否桌面大致基于以下原理:android的桌面其实是由很多应用组成的,也可以称之为桌面应用,知道这个之后问题就简单了,首先,我们只要得到所有桌面应用的包名;然后再得到当前正在运行的应用的包名,如果当前正在运行的应用的包名是桌面应用包名中的其中一个,则介面处于桌面,否则不是。
     下面贴出代码:

	/**
	 * 获得属于桌面的应用的应用包名称
	 * @return 返回包含所有包名的字符串列表
	 */
	public static ArrayList<String> getHomePackages(Context context) {
		ArrayList<String> names = new ArrayList<String>();
		PackageManager packageManager = context.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 static boolean isHome(Context context){
		ActivityManager mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
		String runningPackage = rti.get(0).topActivity.getPackageName();
		ArrayList<String> desktopAppPackages = getHomePackages(context);
//		for (int i = 0; i < desktopAppPackages.size(); i++) {
//			Log.e("桌面包名", desktopAppPackages.get(i) + "-----");
//		}
		Log.e("第一个", rti.get(0).topActivity.getPackageName());
		return desktopAppPackages.contains(runningPackage);
	}
     好了,根据这两个方法,就可以判断当前介面是否是处于桌面了,如果还有其他的方法,欢迎码友们分享出来啊!

你可能感兴趣的:(android,判断当前介面是否是在桌面)