I am using the following code to get the current running activity name in android.

我使用下面的代码在android中获取当前运行的活动名称。

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());

This is working fine in all the versions below android 5.0. But in Android 5.0 it always returning the launcher activity.

这在android 5.0下的所有版本中都运行良好。但在安卓5.0中,它总是返回启动活动。

Please any one help in this because I want to make run the application in all android versions.

请大家帮忙,因为我想在所有android版本中运行这个应用程序。

3 个解决方案

#1


14

Prior to Android L your code will work, but from Android L onward getRunningTask will not work. You have to use getAppRunningProcess.

在Android之前,你的代码将会运行,但是从Android开始,getRunningTask将不会起作用。您必须使用getAppRunningProcess。

Check this code below -

检查下面的代码。

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()]);
}
}  

Hope this helps you :)

希望这能帮助你:)

更多相关文章

  1. Android高版本使用照相机报错 Camera error
  2. Robotium用例通过代码自动解锁屏幕
  3. 不同Android版本设备正确获取屏幕分辨率的通用方法
  4. Android代码性能优化技巧
  5. eclipse中修改工程的Android版本
  6. Android公钥私钥及代码详细解读
  7. 【边做项目边学Android】手机安全卫士04_02:从服务器下载并安装新
  8. android OSChina 客户端源代码剖析
  9. Android SDK需要ADT 23或更高版本

随机推荐

  1. 【C++】深入了解继承方式基础知识及其与
  2. C#/基于Unity 行为树的实现步骤【纯代码
  3. Unity实现脚本插件[Script Create Dialog
  4. 深入理解C#设计模式之策略模式 角色具体
  5. 设计一个c++ 通用链表:实现多态双向的功能
  6. 采用 C# 编写的学委助手详解及实例
  7. C++实现贪吃蛇游戏的详细步骤及实战演示
  8. Thinking in C++ 第一卷阅读全书笔记重点
  9. C/C++区别有哪些?很多人都不知道的比较方
  10. 原来斐波拉契数列还有这种写法,你知道吗?