Dylan Holmes
Dylan Holmes

Reputation: 415

Android - Dynamically Get the Current Activity in Foreground

here is the situation:

  1. In a Thread an event is triggered.
  2. The current activity needs to be retrieved.
  3. Then a Dialog Box is created on that activity and shown.

Problems: As far as I've searched there is no way to retrieve the current activity in the foreground.

Extra info: This needs to be able to be handled in multiple activities. So, it can be popped-up in Activity-A or B or C.

Upvotes: 11

Views: 52620

Answers (6)

justnoone
justnoone

Reputation: 133

just like @Xian Zhang said, using Facebook stetho lib is working for me

ActivityTracker.get().tryGetTopActivity()?.localClassName

If your activity is within the package ui , the output be like

    ui.YourActivityName

your app package name will not be included

Upvotes: 0

Xian Zhang
Xian Zhang

Reputation: 11

Use Face book's stetho package is safest and simplest way for me (and no complaints from other team members that "it's hacky we won't approve!" thing...

Just as simple as:

ActivityTracker.get().tryGetTopActivity();

Upvotes: 0

Prmths
Prmths

Reputation: 2032

I'm not sure if this is what you're looking for, but it seemed pretty straightforward. http://iamvijayakumar.blogspot.com/2011/09/get-current-activity-and-package-name.html

  ActivityManager am = (ActivityManager) this .getSystemService(ACTIVITY_SERVICE);
  List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
  ComponentName componentInfo = taskInfo.get(0).topActivity;
  Log.d(WebServiceHelper.TAG, "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClassName()+"   Package Name :  "+componentInfo.getPackageName());

Hope this helps.

Upvotes: 16

frogmanx
frogmanx

Reputation: 2630

You may do that by extending Activity and Application and having methods that get and set the current viewed Activity reference as an Application level variable. Try this approach: How to get current foreground activity context in android?.

Upvotes: 0

Sushil
Sushil

Reputation: 8488

You can achieve this using a custom broadcast receiver. You can define a broadcast receiver in your thread and write the receiver in different activities. And from your thread you can decide which activity to send broadcast.

In the receiver, you can show the dialog.

Upvotes: 0

CommonsWare
CommonsWare

Reputation: 1007494

Plan A: taking your request literally

Step #1: Have the thread be managed by a service

Step #2: have the service send a message when the "even is triggered" -- LocalBroadcastManager, Square's Otto, greenrobot's EventBus, etc.

Step #3: Have each activity be set up to listen for that message when it is in the foreground

Step #4: Have the activity display the dialog upon receipt of the message


Plan B: same visual result

Step #1: Have the thread be managed by a service

Step #2: Have the service call startActivity() on a dialog-themed activity

Step #3: There is no step #3

Upvotes: 6

Related Questions