web-dev-qa-db-de.com

Android - Holen Sie sich dynamisch die aktuelle Aktivität im Vordergrund

hier ist die Situation:

  1. In einem Thread wird ein Ereignis ausgelöst.
  2. Die aktuelle Aktivität muss abgerufen werden.
  3. Dann wird ein Dialogfeld für diese Aktivität erstellt und angezeigt.

Probleme: Soweit ich gesucht habe, gibt es keine Möglichkeit, die aktuelle Aktivität im Vordergrund abzurufen.

Zusatzinfo: Dies muss in mehreren Aktivitäten gehandhabt werden können. Es kann also in Aktivität-A oder B oder C aufgetaucht werden.

8
Dylan Holmes

Ich bin nicht sicher, ob Sie danach suchen, aber es schien ziemlich einfach zu sein. 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());

Hoffe das hilft.

16
Prmths

Plan A : deine Anfrage wörtlich nehmen

Schritt 1: Lassen Sie den Thread von einem Dienst verwalten

Schritt 2: Lassen Sie den Dienst eine Nachricht senden, wenn "Even" ausgelöst wird - LocalBroadcastManager, Square's Otto, greenrobot's EventBus usw.

Schritt 3: Jede Aktivität muss so eingerichtet sein, dass sie auf diese Nachricht wartet, wenn sie sich im Vordergrund befindet

Schritt 4: Lassen Sie die Aktivität den Dialog nach Erhalt der Nachricht anzeigen


Plan B : dasselbe visuelle Ergebnis

Schritt 1: Lassen Sie den Thread von einem Dienst verwalten

Schritt # 2: Rufen Sie den Service startActivity() für eine Dialogaktivität auf

Schritt 3: Es gibt keinen Schritt 3

5
CommonsWare

Sie können dies tun, indem Sie Activity und Application erweitern und über Methoden verfügen, die die aktuell angezeigte Activity-Referenz als Variable auf Anwendungsebene abrufen und festlegen. Versuchen Sie diesen Ansatz: Wie erhalte ich den aktuellen Kontext der Vordergrundaktivität in Android? .

0
frogmanx

genau wie @ Xian Zhang sagte, mit Facebook stetho lib arbeitet für mich

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

Wenn Ihre Aktivität innerhalb des Pakets ui liegt, ist die Ausgabe wie folgt

    ui.YourActivityName

der Name Ihres App-Pakets wird nicht berücksichtigt

0
justnoone

Verwende Facebook's Stetho Paket ist für mich der sicherste und einfachste Weg (und keine Beschwerden von anderen Teammitgliedern, dass "es hacky ist, wir werden es nicht genehmigen!" Sache ...

So einfach wie:

ActivityTracker.get (). TryGetTopActivity ();

0
Xian Zhang

Sie können dies mit einem benutzerdefinierten Broadcast-Empfänger erreichen. Sie können einen Broadcast-Empfänger in Ihrem Thread definieren und den Empfänger in verschiedene Aktivitäten schreiben. Und aus Ihrem Thread können Sie entscheiden, welche Aktivität gesendet werden soll.

Im Empfänger können Sie den Dialog anzeigen.

0
Sushil