获取运行在手机前台的应用程序

获取手机当前运行在前台的应用程序如下:

第一步,获取当前应用的包名,相信大家应该都知道的,直接上代码:

	// 获得当前应用名
	String packageName = this.getPackageName();

是的,一句代码就搞定了。


接下来才是重点,如何获得手机正在运行的应用程序呢?

获得之后,怎么判断哪个是在前台运行的呢?

首先,我们要获得一个应用程序的管理器:

<pre class="java" name="code">	/** 获得应用程序管理器 */
	private ActivityManager getManager(Context context) {
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(android.content.Context.ACTIVITY_SERVICE);
		return activityManager;
	}

 

有了这个管理器之后,我们就可以获得手机正在运行的应用程序了。

 activityManager有四个关于运行程序的API:

	getRunningAppProcesses();
	getRunningServices(maxNum);
	getRunningTasks(maxNum);
	getRunningServiceControlPanel(service);

具体什么意思我没有查,我用的是第三个,也就是 getRunningTasks(maxNum);

参数maxNum 就是要获得的应用程序个数,

上代码,注释很详细,不多解释:

	/** 获得前台运行的应用名 */
	private String getRunningName(ActivityManager manager) {
		// 获得正在运行的应用集合 30是个数 一般三十个足够了
		List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(30);
		// 判断集合不为空且 size>0
		if (runningTaskInfos != null && runningTaskInfos.size() > 0) {
			// 集合中的第一个正是前台运行的应用程序
			RunningTaskInfo info = runningTaskInfos.get(0);
			// 获得正在前台运行的应用
			ComponentName componentName = info.topActivity;
			// 返回正在运行的应用名
			return componentName.getClassName();
		}
		return null;
	}

相信写到这里,接下来大家都知道怎么做了。

没错,把两个名字比较一下就知道应用程序是否在前台运行了。

 

		// 获得当前在前台运行的应用名
		String topActivityClassName = getRunningName(MainActivity.this);
		Log.i(TAG, "topActivityClassName---" + topActivityClassName);
		// 非空判断 以及当前应用是否在前台运行
		if (packageName != null && topActivityClassName != null
				&& topActivityClassName.startsWith(packageName)) {
			Log.i(TAG, "isRunningForeground---");
			return true;
		}
		Log.i(TAG, "isRunningBackground---");
		return false;

最后一步,千万要检查有没有给应用添加用户权限:

<uses-permission android:name="android.permission.GET_TASKS"/>

这个权限必不可少!

谢谢大家的支持,有建议或是问题欢迎留言! 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值