Android:如何从服务中获取当前前台活动(foreground activity)?

198

有没有一种原生的Android方法可以从服务中获取对当前正在运行的Activity的引用?

我有一个在后台运行的服务,当事件发生(在服务中)时,我想更新我的当前活动。有没有一种简单的方法可以做到这一点(就像我上面提出的那样)?


也许这可以给你一些想法 http://stackoverflow.com/a/28423385/185022 - AZ_
13个回答

0

我不知道这是否是一个愚蠢的答案,但我通过在每次进入任何活动的onCreate()时在共享首选项中存储一个标志来解决了这个问题,然后我使用共享首选项中的值来找出前台活动是什么。


1
我们正在寻找一种本地化的方法来实现它。 - IgniteCoders

-1

这是我的答案,它可以正常工作...

你应该能够以这种方式获取当前的Activity... 如果你的应用程序结构中有几个Activity和许多片段,并且你想跟踪当前的Activity是什么,那将需要很多工作。我的情况是我只有一个Activity和多个Fragments。因此,我可以通过Application对象来跟踪当前的Activity,它可以存储所有全局变量的当前状态。

这是一种方法。当你启动你的Activity时,你可以通过Application.setCurrentActivity(getIntent());来存储该Activity。这个Application会存储它。 在你的服务类中,你可以简单地这样做: Intent currentIntent = Application.getCurrentActivity(); getApplication().startActivity(currentIntent);


2
这假设服务与 Activity 运行在同一进程中,对吗? - dragi

-3

最近才发现这个。使用的API如下:

  • minSdkVersion 19
  • targetSdkVersion 26

    ActivityManager.getCurrentActivity(context)

希望这对你有所帮助。


1
本来还抱有一丝希望。也许在这个问题被回答时,ActivityManager类中确实存在getCurrentActivity()函数(https://developer.android.com/reference/android/app/ActivityManager)。但是现在,这个函数已经不存在了。有趣的是,这个函数还真的存在:`ActivityManager.isUserAMonkey()`。 - ByteSlinger
1
这可以检测出您是否正在使用猴子测试代理来测试您的活动。虽然名字很有趣,但它可能非常有用于测试(并让其他人发笑,显然)。https://developer.android.com/studio/test/monkeyrunner/ - Ken Corey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接