Search code examples
androidandroid-activitylogcat

Listen to ActivityManager events?


is it possible somehow to listen to the events of the ActivityManager, e.g. when activities are started? Does the ActivityManager send broadcasts? I havn't found anything indicating that it does.

What I basically need to do: I want my app to launch one of my activities whenever a certain (thirdparty) app is launched/takes focus. Problem is this needs to happen before the thirdparty app is actually displayed.

What I have tried so far as workarounds:

  1. Logcat output: I query logcat every 0.8s (filtered to show ActivityManager events only) but this eats up to many ressources
  2. getRunningTasks: Slows down the phone a lot too and is not very safe, as an activity might be running but not currently in focus

Any ideas?


Solution

  • I suppose there is no actually other legacy way to handle glabal system state, only

     (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
    

    ActivityManager.getRecentTasks() - Return a list of the tasks that are currently running, with the most recent being first and older ones after in order.

    For details check docs

    Perhaps though Android is a Linux you can run system tools like

    Runtime.getRuntime().exec("ps -aux | grep smth")
    

    But I think it would be hard to detect particular java application.