情况如下:
问题: 据我搜索,无法检索前台的当前活动。
额外信息: 这需要能够在多个活动中处理。因此,它可以在Activity-A或B或C中弹出。
答案 0 :(得分:16)
我不确定这是否是您正在寻找的,但它似乎非常简单。 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());
希望这有帮助。
答案 1 :(得分:5)
计划A :按字面意思提出请求
步骤1:让线程由服务管理
步骤2:让服务在“偶数被触发”时发送消息 - LocalBroadcastManager
,Square's Otto,greenrobot的EventBus等。
步骤3:将每个活动设置为在该信息位于前台时收听该信息
步骤#4:让活动在收到消息后显示对话框
计划B :相同的视觉效果
步骤1:让线程由服务管理
步骤2:在对话主题活动
上进行服务调用startActivity()
步骤3:没有第3步
答案 2 :(得分:0)
您可以使用自定义广播接收器实现此目的。您可以在线程中定义广播接收器,并在不同的活动中编写接收器。从您的主题中,您可以决定发送广播的活动。
在接收器中,您可以显示对话框。
答案 3 :(得分:0)
您可以通过扩展活动和应用程序并使用获取和设置当前查看的活动参考作为应用程序级别变量的方法来实现。 试试这种方法:How to get current foreground activity context in android?。
答案 4 :(得分:0)
就像@Xian Zhang所说的那样,使用Facebook stetho lib对我有用
ActivityTracker.get().tryGetTopActivity()?.localClassName
如果您的活动在ui包中,则输出类似于
ui.YourActivityName
您的应用包名称将不包含在内
答案 5 :(得分:-1)
使用Face book's stetho软件包对我来说是最安全和最简单的方式(而且其他团队成员没有抱怨“这是我们不会批准的hacky!”的事情......
就像:
一样简单ActivityTracker.get()tryGetTopActivity();