1.获取当前当前运行在前台的app的包名
public static String getCurrentPkgName(Context context) {
// 5x系统以后利用反射获取当前栈顶activity的包名。
ActivityManager.RunningAppProcessInfo currentinfo = null;
Field field = null;
int startTaskToFront = 2;
String pkgName = null;
try {
//通过反射获取进程状态字段
field = ActivityManager.RunningAppProcessInfo.class.getDeclaredField("processState");
} catch (Exception e) {
e.printStackTrace();
}
ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
List appList = am.getRunningAppProcesses();
ActivityManager.RunningAppProcessInfo app;
for (int i = 0; i < appList.size(); i++) {
//ActivityManager.RunningAppProcessInfoapp:appList
app = (ActivityManager.RunningAppProcessInfo) appList.get(i);
//表示前台运行进程•
if (app.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
Integer state = null;
try {
//反射调用字段值的方法,获取该进程的状态。
state = field.getInt(app);
} catch (Exception e) {
e.printStackTrace();
}
//根据这个判断条件从前台获取当初切换的对象
if (state != null && state == startTaskToFront) {
currentinfo = app;
break;
}
}
}
if (currentinfo != null) {
pkgName = currentinfo.processName;
}
Log.e("lmj", "pkgname = " + pkgName);
return pkgName;
}
2.通过获取的包名杀死当前运行在前台的app
public static void killApp(String packageName) {
//获取应用程序管理器
ActivityManager manager = (ActivityManager) ContextUtil.getContext().getSystemService(ACTIVITY_SERVICE);
//manager.killBackgroundProcesses(packageName);
manager.forceStopPackage(packageName);
}