情况如下:
- 在线程中触发事件。
- 需要检索当前活动。
- 然后在该活动上创建一个对话框并显示。
问题:据我搜索,没有办法在前台检索当前活动。
额外信息:这需要能够在多个活动中处理。因此,它可以在 Activity-A 或 B 或 C 中弹出。
情况如下:
问题:据我搜索,没有办法在前台检索当前活动。
额外信息:这需要能够在多个活动中处理。因此,它可以在 Activity-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 的 Otto、greenrobot 的 EventBus 等。
第 3 步:设置每个 Activity 以在该消息处于前台时侦听该消息
第 4 步:让活动在收到消息后显示对话框
B计划:相同的视觉效果
步骤#1:让线程由服务管理
第 2 步:让服务调用startActivity()
以对话为主题的活动
第 3 步:没有第 3 步
您可以使用自定义广播接收器来实现此目的。您可以在线程中定义广播接收器并在不同的活动中编写接收器。从您的线程中,您可以决定发送广播的活动。
在接收器中,您可以显示对话框。
您可以通过扩展 Activity 和 Application 并使用获取和设置当前查看的 Activity 引用作为应用程序级别变量的方法来做到这一点。试试这个方法:How to get current foreground Activity context in android? .
使用Facebook 的 stetho包对我来说是最安全和最简单的方法(并且其他团队成员没有抱怨“我们不会批准这太骇人听闻了!”事情......
就像这样简单:
ActivityTracker.get().tryGetTopActivity();
就像@Xian Zhang 说的,使用Facebook stetho lib 对我有用
ActivityTracker.get().tryGetTopActivity()?.localClassName
如果您的活动在包 ui 中,则输出类似于
ui.YourActivityName
您的应用程序包名称将不包括在内