Skip to content Skip to sidebar Skip to footer

How To Get Running Application Activity Name In Android 5.0(l)?

I am using the following code to get the current running activity name in android. ActivityManager am = (ActivityManager) aContext .getSystemService(Context.ACTIVIT

Solution 1:

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

Check this code below -

publicclassDetectCalendarLaunchRunnableimplementsRunnable {

@Overridepublicvoidrun() {
  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 = newString[1];
  activePackages[0] = componentName.getPackageName();
  return activePackages;
}

String[] getActivePackages() {
  final Set<String> activePackages = newHashSet<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(newString[activePackages.size()]);
}
}  

Hope this helps you :)

Solution 2:

You can use this:

StringpackageName="";
StringclassName="";

UsageStatsManagerusageStatsManager= (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE);

if (usageStatsManager != null)
{
   UsageEventsqueryEvents= usageStatsManager.queryEvents(System.currentTimeMillis() - 10000, System.currentTimeMillis());

   if (queryEvents != null) 
   {
      UsageEvents.Eventevent=newUsageEvents.Event();

      while (queryEvents.hasNextEvent()) 
      {
          UsageEvents.EventeventAux=newUsageEvents.Event();
          queryEvents2.getNextEvent(eventAux);

          if (eventAux.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND)
          {
              event = eventAux;
          }
      }

      packageName = event.getPackageName();
      className = event.getClassName();
   }
}

You need the android.permission.PACKAGE_USAGE_STATS, which is a system-level permission and will not be granted to third-party apps. However, declaring the permission implies intention to use the API and the user of the device can grant permission through the Settings application.

Or you can do:

pm grant com.your.package android.permission.PACKAGE_USAGE_STATS

Solution 3:

Please Check link.

Unfortunately, there is no equivalent in Android 5.0: it is not possible to get the top most activity, nor is it possible get any callback when a new application/activity is launched in realtime.

methods deplicated in 5.0

Post a Comment for "How To Get Running Application Activity Name In Android 5.0(l)?"