How to get any identifier of the topmost activity?

android

Solution

This top part is outdated. See bottom for answer.

I'm assuming you're referring to Activities within your own application:

All Activities call `onResume()` when coming to the foreground and `onPause()` when leaving the foreground. Simply override this method with your functionality (be sure to call `super.onResume()` and `super.onPause()` respectively!).

As for the identifier, perhaps you could make your Service have a static method that is called by an Activity coming to the foreground (in `onResume()`), supplying a reference to itself, its class, some arbitrary ID, etc.

Reference: http://developer.android.com/reference/android/app/Activity.html

Edit:

You can access the top Activity's identity via `ActivityManager` -> running tasks -> `ComponentName`. Be sure to declare `<uses-permission android:name="android.permission.GET_TASKS" />` in your manifest.

Context context = someArbitraryContext;
ActivityManager am = (ActivityManager) context.
    getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
String className = am.getRunningTasks(1).get(0).topActivity.getClassName();

As for getting a notification, you'll probably have to just check the top Activity every x milliseconds.

Problem

I have a service and its behavior must change when topmost Activity changes. Say, Activity A is active and then service starts some kind of processing. This processing must stop when Activity A is no longer visible: user pressed "Back", "Home" or did anything else that makes Activity A invisible. This Activity A must not be aware of the service -- i.e. it must not have to explicitly inform the Service that it is going away. In the nutshell, is there a way to: - Get any kind of identification (object reference, class name, ID, etc.) of the topmost Activity, - Receive notification when topmost Activity changes? P.S. This may sound like malware behavior, but it is not! It is legitimate use-case! Edit: Activities are not in my application. They can be just about anything -- browser, maps app, settings, etc.

Original source