ここに状況があります:
問題:私が検索した限りでは、フォアグラウンドで現在のアクティビティを取得する方法はありません。
追加情報:これは、複数のアクティビティで処理できる必要があります。したがって、アクティビティAまたはBまたはCでポップアップできます。
これがあなたが探しているものかどうかはわかりませんが、かなり簡単に思えました。 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());
お役に立てれば。
プランA:文字通りリクエストを受け取ります
ステップ#1:スレッドをサービスで管理する
ステップ2:「偶数がトリガーされた」ときにサービスにメッセージを送信させる-LocalBroadcastManager
、Square's Otto、greenrobot's EventBusなど.
ステップ#3:各アクティビティがフォアグラウンドにあるときにそのメッセージをリッスンするように設定する
ステップ#4:メッセージの受信時にアクティビティにダイアログを表示させる
プランB:同じ視覚的結果
ステップ#1:スレッドをサービスで管理する
ステップ#2:ダイアログをテーマにしたアクティビティでstartActivity()
をサービスに呼び出す
ステップ#3:ステップはありません#3
そのためには、アクティビティとアプリケーションを拡張し、現在表示されているアクティビティ参照をアプリケーションレベルの変数として取得および設定するメソッドを用意します。このアプローチを試してください: androidで現在のフォアグラウンドアクティビティコンテキストを取得する方法 。
@Xian Zhangが言ったように、 Facebook stetho libを使用するとうまくいきます
ActivityTracker.get().tryGetTopActivity()?.localClassName
アクティビティがパッケージui内にある場合、出力は次のようになります
ui.YourActivityName
アプリのパッケージ名は含まれません
使用 フェイスブックのstetho パッケージは私にとって最も安全で最も簡単な方法です(そして「他のチームメンバーからは「私たちが承認しないのはハッキーだ!」という不満はありません)。
と同じくらい簡単:
ActivityTracker.get()。tryGetTopActivity();
これは、カスタムブロードキャストレシーバーを使用して実現できます。スレッドでブロードキャストレシーバーを定義し、さまざまなアクティビティでレシーバーを書き込むことができます。スレッドから、ブロードキャストを送信するアクティビティを決定できます。
レシーバーでは、ダイアログを表示できます。