Android 推断程序在手机中是否是活动状态或者正在执行状态

Posted lytwajue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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个程序,然后去循环这个结果集。获取在迭代过程中每一个程序的基础页面的包名和栈式最顶层的包名。用该包名和我们须要推断传入的包名參数进行比对,假设找到了就觉得该程序正在执行,假设没找到就证明该程序没在执行。我现有的程序就是这样实现的,如有漏洞还请批评指正。沈阳斌子原创。


以上是关于Android 推断程序在手机中是否是活动状态或者正在执行状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中检查3g是不是处于活动状态

android中检測网络连接状态简单总结

android 推断手机是否支持前置摄像头

android推断是否连接wifi和网络状态的推断

推断手机网络连接状态

如何在 Android 中检测设备状态离线/在线