1. 程式人生 > >判斷手機當前介面是不是Home介面的方法

判斷手機當前介面是不是Home介面的方法

        /**
	 * 判斷當前介面是否是在home頁面,如果是在home頁面,返回true,否則返回false,
         * 判斷是Home介面主要A:找到能能實現Home介面的程式集合,B:處於棧頂的活動是否包含在這個集合中
	 */
	@SuppressWarnings("deprecation")
	public static boolean isHome(Context mContext) {
		if (Build.VERSION.SDK_INT < 21) {
			Log.e("TAG",Build.VERSION.SDK_INT+"" );//判斷當前手機的版本
			Log.e("TAG", "看看是不是版本小於21就出現在這裡了");
			ActivityManager mActivityManager = (ActivityManager) mContext
					.getSystemService(Context.ACTIVITY_SERVICE);
			List<String> strs = getHomes(mContext);
			List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
			if (strs != null && strs.size() > 0) {
				return strs.contains(rti.get(0).topActivity.getPackageName());
			} else {
				return false;
			}
		} else {
			final int PROCESS_STATE_TOP = 2;
			try {
				// 獲取正在執行的程序應用的資訊實體中的一個欄位,通過反射獲取出來
				Field processStateField = ActivityManager.RunningAppProcessInfo.class
						.getDeclaredField("processState");
				// 獲取所有的正在執行的程序應用資訊實體物件
				List<ActivityManager.RunningAppProcessInfo> processes = ((ActivityManager) mContext
						.getSystemService(Context.ACTIVITY_SERVICE))
						.getRunningAppProcesses();
				// 迴圈所有的程序,檢測某一個程序的狀態是最上面,也是就最近執行的一個應用的狀態的時候,就返回這個應用的包名
				for (ActivityManager.RunningAppProcessInfo process : processes) {
					if (process.importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
							&& process.importanceReasonCode == 0) {
						int state = processStateField.getInt(process);
						if (state == PROCESS_STATE_TOP) { // 如果這個實體物件的狀態為最近的執行應用
							String[] packname = process.pkgList;
							// 返回應用的包名
							//LogUtils.debug(packname[0]);
							Log.d("TAG", packname[0]);
							if (getPackageName(mContext).contains(packname[0])) {
								return false;
							}
							return getHomes(mContext).contains(packname[0]);
						}
					}
				}
			} catch (Exception e) {
			}
			return false;
		}
	}

	
	
	/**
	 * 獲得屬於桌面的應用的應用包名稱
	 * 
	 * @return 返回所有能啟動桌面程式的應用程式,包括home鍵,和電源鍵
	 */
	private static List<String> getHomes(Context mContext) {
		List<String> names = new ArrayList<String>();
		PackageManager packageManager = mContext.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);
			Log.e("TAG",ri.activityInfo.packageName+" X ");
		}
		return names;
	}
	
	
	

	public static String getPackageName(Context context) {
		return context.getPackageName();
	}