沈陽斌子在今天項目需求上碰到個這樣的問題,在Service中需要判斷當前的程序是否是活動狀態,換句話說也就是說後臺跑的服務中有業務需求檢測當前程序是否是該服務的程序 這樣好讓點擊推送通知時跳轉到不同的頁面進行不同的操作。下面就粘貼出我封裝瞭一下的方法和大傢共享。
/** * * @Description : 這個包名的程序是否在運行 * @Method_Name : isRunningApp * @param context 上下文 * @param packageName 判斷程序的包名 * @return 必須加載的權限 * * @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 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個程序,然後去循環這個結果集,獲取在迭代過程中每個程序的基礎頁面的包名和棧式最頂層的包名,用該包名和我們需要判斷傳入的包名參數進行比對,如果找到瞭就認為該程序正在運行,如果沒找到就證明該程序沒在運行。我現有的程序就是這樣實現的,如有漏洞還請批評指正。沈陽斌子原創。