android - 如何在android 5.0(L)中获取正在运行的应用程序 Activity 名称?

标签 android android-5.0-lollipop

我正在使用以下代码获取 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/

相关文章:

android - 如何确定设备使用的是 12 小时还是 24 小时时间格式?

android - 在 webview Android 中获取事件点击链接

android - 未找到 java.lang.String android.os.SystemProperties.native_get(java.lang.String) 的实现

Android - GCMRegistrar.checkDevice() 的 UnSupportedOperation 异常

Android - SQLite 数据库 - 应用程序更新

java - 安卓编程 : Looping Voice Recognition

xml - Android L 无法绘制虚线作为可绘制背景

android - Gmail ListView 翻转动画

Android: float 操作按钮内的细节动画

java - 方法...必须覆盖父类(super class)方法(最新 SDK)