Android里获取正在前端运行的Activity的包名的方法
使用前提:
- 此方法只在 android5.0 以上有效。
- AndroidManifest 中加入下面的权限,这个权限需要应用是系统级别的。
<uses-permission android:name="android.permission.REAL_GET_TASKS" />
代码:
public static String getTopActivityPackageName(Context context) {
final int PROCESS_STATE_TOP = 2;
try {
//通过反射获取私有成员变量processState,稍后需要判断该变量的值
Field processStateField = ActivityManager.RunningAppProcessInfo.class.getDeclaredField("processState");
List<ActivityManager.RunningAppProcessInfo> processes = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo process : processes) {
//判断进程是否为前台进程
if (process.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
int state = processStateField.getInt(process);
//processState值为2
if (state == PROCESS_STATE_TOP) {
String[] packageName = process.pkgList;
Log.d("wujiang", "getLollipopRecentTask: packageName = " + packageName[0]);
return packageName[0];
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return " ";
}
还可以用下面的方法
public static boolean isCurrentActivity(Context context) {
String processActivity = "";
String dvbActivity = context.getPackageName();
Log.d("wujiang", "isCurrentActivity: dvbActivity = " + dvbActivity);
try {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//获取正在运行的task列表,其中1表示最近运行的task,通过该数字限制列表中task数目,最近运行的靠前
List<ActivityManager.RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
if (runningTaskInfos != null && runningTaskInfos.size() != 0) {
processActivity = (runningTaskInfos.get(0).baseActivity).getPackageName();
Log.d("wujiang", "isCurrentActivity: processActivity = " + processActivity);
}
} catch (Exception e) {
Log.d("wujiang", "isCurrentActivity: error msg = " + e.getMessage());
processActivity = " ";
}
if (dvbActivity.equals(processActivity)) {
return true;
}
return false;
}
The End