Question

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?

Was it helpful?

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.

OTHER TIPS

I think you can use the launch mode to determine which activity to launch to top level. Please check the question: Android singleTask or singleInstance launch mode?. Maybe it will help you.

I had a look in the android source, but there doesn't seem to be any events broadcasted.

https://android.googlesource.com/platform/packages/providers/ApplicationsProvider

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top