Android How to - Start an App if it is not Running








Question

We would like to know how to start an App if it is not Running.

Answer

import java.util.List;
/*from   w  w  w  .ja  v  a2 s . co m*/
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;

public class Main {
  public static boolean startApp(Context context, Class<?> launcherActivityClass){
    try {
      Intent  intent;
      
      if(isAppRunning(context)){
        intent = new Intent(context, launcherActivityClass);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
      } else {
        String packageName  = context.getPackageName();
        intent    = context.getPackageManager().getLaunchIntentForPackage(packageName);
        if(intent != null){
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          intent.setAction(Intent.ACTION_MAIN);
          intent.addCategory(Intent.CATEGORY_LAUNCHER);
          context.startActivity(intent);
        } else {
          return false;
        }
      }
    } catch (ActivityNotFoundException e){
      return false;
    }
    
    return true;
  }
  public static boolean isAppRunning(Context context) {
    boolean isRunning = false;
    
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> list = am.getRunningTasks(100);
    if (list.size() <= 0) {
      return false;
    }
      
    String packageName = context.getPackageName();
    for (RunningTaskInfo info : list) {
      if (info.topActivity.getPackageName().equals(packageName)) {
        isRunning = true;
        break;
      }
    }
    
    return isRunning;
  }
}