满意答案
cvsfzle390
2016.08.09
采纳率:53% 等级:8
已帮助:164人
按照OS版本不同,有不同的处理办法。
Lollipop之前:
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List task = am.getRunningTasks(1);
ActivityManager.RunningTaskInfo info= task.get(0);
上述代码可以获取到当前运行的任务列表,Lollipop之前的话这个列表的第一个就是当前运行的任务信息。
info.topActivity.getClassName()可以获取到当前在前台运行的类名,和你自己要检测的类名做比较即可。
从Lollipop开始,由于安全性增强,上面这个方法没法获取到所有任务列表,所以不能用了,可以用下面的方法来获取当前运行的Activity的类名:
final int PROCESS_STATE_TOP = 2;
ActivityManager.RunningAppProcessInfo currentInfo = null;
Field field = null;
try {
field =ActivityManager.RunningAppProcessInfo.class.getDeclaredField("processState");
} catch (Exception ignored) {
}
ActivityManager am =(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List appList =am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo app : appList) {
if (app.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
&& app.importanceReasonCode == ActivityManager.RunningAppProcessInfo.REASON_UNKNOWN) {
Integer state = null;
try {
state = field.getInt(app);
}catch (Exception e) {
}
if (state != null && state == PROCESS_STATE_TOP) {
currentInfo = app;
break;
}
}
}
if (currentInfo != null) {
for (String packageName : currentInfo.pkgList) {
if (getPackageName().equals(packageName)) {
return true;
}
}
}追问: 能不能直接发个实例过来啊
我自己看看,,,,
追答: 代码都贴在这了啊…………我自己在手机上试过是可以用的
追问: 想要实例啊 大神
追问: 大神 帮人帮到底
实例直发
追问: 谢谢了
00分享举报