应用开发中,经常遇到需要获取系统正在运行的前台应用是什么应用,例如桌面悬浮窗挂件,需要获取当前是不是处于桌面;然而随着Android版本的迭代,获取前台应用的方法都陆续被制裁,因此对这些方法做一个总结。
Android 5.0以前版本 getRunningTasks()
在Android 5.0以前的版本中,google提供了getRunningTasks()方法来获取所有正在运行的应用程序,获取前台应用可以通过下面的代码实现
public static String getTopAppPackageName(Context context) {
String packageName = "";
try {
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
packageName = rti.get(0).topActivity.getPackageName();
}
}catch (Exception ignored){
}
return packageName;
}
其中Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
判断 是否是5.0之前的版本,因为在Android 5.0版本开始,getRunningTasks()方法只能返回本应用和launcher。
Android 5.0 getRunningAppProcesses()
在Android 5.0中,google新增了getRunningAppProcesses()方法,用来获取所有当前运行的应用,具体代码实现如下
public static String getTopAppPackageName(Context context) {
String packageName = "";
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
try {
if(Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {