push notification – ActivityManager.getRunningTasks is deprecated android-ThrowExceptions

Exception or error:

I am working on push notification in android where i am using a below method to show notification, but the problem is that now ActivityManager.getRunningTasks(1); is being deprecated. From one stackoverflow question i read that: ” you can use getAppTasks() returning a List<AppTask> where you can get the RecentTaskInfo with getTaskInfo” but i can’t figure it out how to use it. Please help me out here in this regard.

private void postNotification(Context ctx, Intent intent) {
        try {
            if (intent == null) {
                Log.d(TAG, "Receiver intent null");
            } else {
                String action = intent.getAction();
                if (action.equals("com.ziza.cy.UPDATE_STATUS")) {

                    JSONObject json = new JSONObject(intent.getExtras()

                    String type = json.getString("type");

                    if (type.equals("AlertNotification")) {

                        String msg = json.getString("header");
                        String title = "ncy";

                        ActivityManager am = (ActivityManager) ctx
                        List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
                        ComponentName componentInfo = taskInfo.get(0).topActivity;

                        // don't show notification if app is in foreground
                        if (componentInfo.getPackageName().equalsIgnoreCase(
                                ctx.getPackageName())) {

                            // send broadcast receiver
                            Intent intentBroad = new Intent();
                            intentBroad.putExtra("msg", msg);
                            intentBroad.putExtra("title", title
                                    + " "
                                    + taskInfo.get(0).topActivity.getClass()
                        } else {
                            // Activity Not Running
                            // Generate Notification

                            Intent intnt = new Intent(ctx, LogInActivity.class);
                            PendingIntent contentIntent = PendingIntent
                                    .getActivity(ctx, 0, intnt, 0);
                                    | Intent.FLAG_ACTIVITY_NEW_TASK);

                            NotificationCompat.Builder builder = new NotificationCompat.Builder(
                                            new NotificationCompat.BigTextStyle()

                            Uri alarmSound = RingtoneManager
                            NotificationManager notificationManager = (NotificationManager) ctx

                            notificationManager.notify(0, builder.build());


        } catch (JSONException e) {
            Log.d(TAG, "JSONException: " + e.getMessage());
How to solve:

This should help you get started

ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> tasks = activityManager.getAppTasks();

for (ActivityManager.AppTask task : tasks) {
    Log.d(TAG, "stackId: " + task.getTaskInfo().stackId);


This should work for the pre Lollipop devices as well as for Lollipop devices

public static boolean isBackgroundRunning(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                for (String activeProcess : processInfo.pkgList) {
                    if (activeProcess.equals(context.getPackageName())) {
                        //If your app is the process in foreground, then it's not in running in background
                        return false;

        return true;

Edit: It should return true if the app is in background, not the opposite


May you want this:

 * Checking Whether any Activity of Application is running or not
 * @param context
 * @return
public static boolean isForeground(Context context) {

    // Get the Activity Manager
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    // Get a list of running tasks, we are only interested in the last one,
    // the top most so we give a 1 as parameter so we only get the topmost.
    List<ActivityManager.RunningAppProcessInfo> task = manager.getRunningAppProcesses();

    // Get the info we need for comparison.
    ComponentName componentInfo = task.get(0).importanceReasonComponent;

    // Check if it matches our package name.
        return true;

    // If not then our app is not on the foreground.
    return false;


in Kotlin

fun isAppRunning(context: Context): Boolean {
  val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
  return activityManager.appTasks
    .filter { it.taskInfo != null }
    .filter { it.taskInfo.baseActivity != null }
    .any { it.taskInfo.baseActivity.packageName == context.packageName }

Leave a Reply

Your email address will not be published. Required fields are marked *