沈阳斌子在今天项目需求上碰到个这样的问题,在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个程序,然后去循环这个结果集,获取在迭代过程中每个程序的基础页面的包名和栈式最顶层的包名,用该包名和我们需要判断传入的包名参数进行比对,如果找到了就认为该程序正在运行,如果没找到就证明该程序没在运行。我现有的程序就是这样实现的,如有漏洞还请批评指正。沈阳斌子原创。