我正在使用以下代码获取 android 中当前正在运行的 Activity 名称。
ActivityManager am = (ActivityManager) aContext
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> alltasks = am
.getRunningTasks(1);
ComponentName componentInfo = alltasks.get(0).topActivity;
componentInfo.getClassName();
System.out.println("Current:"+componentInfo.getClassName());
这在 android 5.0
以下的所有版本中都运行良好。但在 Android 5.0 中,它总是返回启动器 Activity 。
请任何人帮忙,因为我想在所有 android 版本中运行该应用程序。
最佳答案
在 Android L 之前,您的代码可以工作,但从 Android L 开始,getRunningTask 将无法工作。您必须使用 getAppRunningProcess。
检查下面的代码 -
public class DetectCalendarLaunchRunnable implements Runnable {
@Override
public void run() {
String[] activePackages;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
activePackages = getActivePackages();
} else {
activePackages = getActivePackagesCompat();
}
if (activePackages != null) {
for (String activePackage : activePackages) {
if (activePackage.equals("com.google.android.calendar")) {
//Calendar app is launched, do something
}
}
}
mHandler.postDelayed(this, 1000);
}
String[] getActivePackagesCompat() {
final List<ActivityManager.RunningTaskInfo> taskInfo = mActivityManager.getRunningTasks(1);
final ComponentName componentName = taskInfo.get(0).topActivity;
final String[] activePackages = new String[1];
activePackages[0] = componentName.getPackageName();
return activePackages;
}
String[] getActivePackages() {
final Set<String> activePackages = new HashSet<String>();
final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
activePackages.addAll(Arrays.asList(processInfo.pkgList));
}
}
return activePackages.toArray(new String[activePackages.size()]);
}
}
希望这对你有帮助:)
关于android - 如何在android 5.0(L)中获取正在运行的应用程序 Activity 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27689276/