Android 推断程序在手机中是否是活动状态或者正在执行状态
沈阳斌子在今天项目需求上碰到个这种问题,在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个程序,然后去循环这个结果集。获取在迭代过程中每一个程序的基础页面的包名和栈式最顶层的包名。用该包名和我们须要推断传入的包名參数进行比对,假设找到了就觉得该程序正在执行,假设没找到就证明该程序没在执行。我现有的程序就是这样实现的,如有漏洞还请批评指正。沈阳斌子原创。