web-dev-qa-db-ja.com

Android-現在のアクティビティをフォアグラウンドで動的に取得します

ここに状況があります:

  1. スレッドでは、イベントがトリガーされます。
  2. 現在のアクティビティを取得する必要があります。
  3. 次に、そのアクティビティにダイアログボックスが作成され、表示されます。

問題:私が検索した限りでは、フォアグラウンドで現在のアクティビティを取得する方法はありません。

追加情報:これは、複数のアクティビティで処理できる必要があります。したがって、アクティビティAまたはBまたはCでポップアップできます。

8
Dylan Holmes

これがあなたが探しているものかどうかはわかりませんが、かなり簡単に思えました。 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());

お役に立てれば。

16
Prmths

プランA:文字通りリクエストを受け取ります

ステップ#1:スレッドをサービスで管理する

ステップ2:「偶数がトリガーされた」ときにサービスにメッセージを送信させる-LocalBroadcastManager、Square's Otto、greenrobot's EventBusなど.

ステップ#3:各アクティビティがフォアグラウンドにあるときにそのメッセージをリッスンするように設定する

ステップ#4:メッセージの受信時にアクティビティにダイアログを表示させる


プランB:同じ視覚的結果

ステップ#1:スレッドをサービスで管理する

ステップ#2:ダイアログをテーマにしたアクティビティでstartActivity()をサービスに呼び出す

ステップ#3:ステップはありません#3

5
CommonsWare

そのためには、アクティビティとアプリケーションを拡張し、現在表示されているアクティビティ参照をアプリケーションレベルの変数として取得および設定するメソッドを用意します。このアプローチを試してください: androidで現在のフォアグラウンドアクティビティコンテキストを取得する方法

0
frogmanx

@Xian Zhangが言ったように、 Facebook stetho libを使用するとうまくいきます

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

アクティビティがパッケージui内にある場合、出力は次のようになります

    ui.YourActivityName

アプリのパッケージ名は含まれません

0
justnoone

使用 フェイスブックのstetho パッケージは私にとって最も安全で最も簡単な方法です(そして「他のチームメンバーからは「私たちが承認しないのはハッキーだ!」という不満はありません)。

と同じくらい簡単:

ActivityTracker.get()。tryGetTopActivity();

0
Xian Zhang

これは、カスタムブロードキャストレシーバーを使用して実現できます。スレッドでブロードキャストレシーバーを定義し、さまざまなアクティビティでレシーバーを書き込むことができます。スレッドから、ブロードキャストを送信するアクティビティを決定できます。

レシーバーでは、ダイアログを表示できます。

0
Sushil