10

情况如下:

  1. 在线程中触发事件。
  2. 需要检索当前活动。
  3. 然后在该活动上创建一个对话框并显示。

问题:据我搜索,没有办法在前台检索当前活动。

额外信息:这需要能够在多个活动中处理。因此,它可以在 Activity-A 或 B 或 C 中弹出。

4

6 回答 6

15

我不确定这是否是你要找的,但它看起来很简单。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());

希望这可以帮助。

于 2013-08-07T23:35:01.537 回答
6

计划A:从字面上理解你的要求

步骤#1:让线程由服务管理

第 2 步:让服务在“触发偶数”时发送消息—— LocalBroadcastManager、Square 的 Otto、greenrobot 的 EventBus 等。

第 3 步:设置每个 Activity 以在该消息处于前台时侦听该消息

第 4 步:让活动在收到消息后显示对话框


B计划:相同的视觉效果

步骤#1:让线程由服务管理

第 2 步:让服务调用startActivity()以对话为主题的活动

第 3 步:没有第 3 步

于 2013-08-07T23:34:48.837 回答
0

您可以使用自定义广播接收器来实现此目的。您可以在线程中定义广播接收器并在不同的活动中编写接收器。从您的线程中,您可以决定发送广播的活动。

在接收器中,您可以显示对话框。

于 2013-08-07T23:38:50.073 回答
0

您可以通过扩展 Activity 和 Application 并使用获取和设置当前查看的 Activity 引用作为应用程序级别变量的方法来做到这一点。试试这个方法:How to get current foreground Activity context in android? .

于 2013-08-07T23:39:14.047 回答
0

使用Facebook 的 stetho包对我来说是最安全和最简单的方法(并且其他团队成员没有抱怨“我们不会批准这太骇人听闻了!”事情......

就像这样简单:

ActivityTracker.get().tryGetTopActivity();

于 2016-11-14T22:57:13.273 回答
0

就像@Xian Zhang 说的,使用Facebook stetho lib 对我有用

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

如果您的活动在包 ui 中,则输出类似于

    ui.YourActivityName

您的应用程序包名称将不包括在内

于 2019-09-20T02:45:55.553 回答