获取手机当前运行在前台的应用程序如下:
第一步,获取当前应用的包名,相信大家应该都知道的,直接上代码:
// 获得当前应用名
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"/>
这个权限必不可少!
谢谢大家的支持,有建议或是问题欢迎留言!