Android 判斷當前介面是否是在桌面



在移動開發中,經常遇到要判斷當前介面是否是桌面的情況,網上有很多例子,我這裡貼出,一則方便自己日後查詢,二則方便給需要的碼友們看。
Android設備上,判斷當前介面是否桌面大致基於以下原理:android的桌面其實是由很多應用組成的,也可以稱之為桌面應用,知道這個之後問題就簡單瞭,首先,我們隻要得到所有桌面應用的包名;然後再得到當前正在運行的應用的包名,如果當前正在運行的應用的包名是桌面應用包名中的其中一個,則介面處於桌面,否則不是。
下面貼出代碼:

	/**
	 * 獲得屬於桌面的應用的應用包名稱
	 * @return 返回包含所有包名的字符串列表
	 */
	public static ArrayList getHomePackages(Context context) {
		ArrayList names = new ArrayList();
		PackageManager packageManager = context.getPackageManager();
		//屬性
		Intent intent = new Intent(Intent.ACTION_MAIN);
		intent.addCategory(Intent.CATEGORY_HOME);
		List 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 rti = mActivityManager.getRunningTasks(1);
		String runningPackage = rti.get(0).topActivity.getPackageName();
		ArrayList 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);
	}

好瞭,根據這兩個方法,就可以判斷當前介面是否是處於桌面瞭,如果還有其他的方法,歡迎碼友們分享出來啊!

發佈留言