views:

257

answers:

2

Hi,

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? Thanks!

Christian

A: 

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.

ponkin
A: 

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

http://android.git.kernel.org/?p=platform/packages/providers/ApplicationsProvider.git;a=tree

dparnas
Do you think it would be possible to update the Activitylauncher.java in a way that it does broadcast and replace it with the one on the user's device then (for root users only obviously)? I guess this won't work due to the ROM's digital signature.
ChristianS