1. 程式人生 > >Android 推斷程序在手機中是否是活動狀態或者正在執行狀態

Android 推斷程序在手機中是否是活動狀態或者正在執行狀態

systems scrip post manage art 推送通知 auth bool 當前

沈陽斌子在今天項目需求上碰到個這種問題,在Service中須要推斷當前的程序是否是活動狀態,換句話說也就是說後臺跑的服務中有業務需求檢測當前程序是否是該服務的程序 這樣好讓點擊推送通知時跳轉到不同的頁面進行不同的操作。

以下就粘貼出我封裝了一下的方法和大家共享。

/**
	 * 
	 *  @Description    : 這個包名的程序是否在執行
	 *  @Method_Name    : isRunningApp
	 *  @param context 上下文
	 *  @param packageName 推斷程序的包名
	 *  @return 必須載入的權限
	 *      <uses-permission android:name="android.permission.GET_TASKS" /> 
	 *  @return         : boolean
	 *  @Creation Date  : 2014-10-31 下午1:14:15 
	 *  @version        : v1.00
	 *  @Author         : JiaBin
	 
	 *  @Update Date    : 
	 *  @Update Author  : JiaBin
	 */
	public static boolean isRunningApp(Context context, String packageName) {
		boolean isAppRunning = false;
		ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningTaskInfo> list = am.getRunningTasks(100);
		for (RunningTaskInfo info : list) {
			if (info.topActivity.getPackageName().equals(packageName) && info.baseActivity.getPackageName().equals(packageName)) {
				isAppRunning = true;
				// find it, break
				break;
			}
		}
		return isAppRunning;
	}

首先須要註意的是要想進行推斷,必須增加凝視中的那個權限。不然程序會拋異常的。大體的思路是這種,獲得Activity的管理器。而且通過管理器獲得當前正在執行的100個程序,然後去循環這個結果集。獲取在叠代過程中每一個程序的基礎頁面的包名和棧式最頂層的包名。用該包名和我們須要推斷傳入的包名參數進行比對,假設找到了就覺得該程序正在執行,假設沒找到就證明該程序沒在執行。我現有的程序就是這樣實現的,如有漏洞還請批評指正。沈陽斌子原創。

Android 推斷程序在手機中是否是活動狀態或者正在執行狀態