为什么getCallingActivity总是返回null?

时间:2011-11-27 23:04:33

标签: android android-activity

我有一个欢迎屏幕,可以作为我的应用程序中的第一个活动启动,或者它可以由用户花费时间的主要活动启动。我希望它在从家里开始时的行为略有不同屏幕(或任何其他应用程序)或主要活动。

在onCreate中调用getCallingActivity()似乎总是返回null,无论调用什么活动。这很奇怪,因为它确实更早地工作,这就是我如何找到字符串返回的格式(无论如何应该在文档中)。我看不出会有什么影响它,因为在调用getCallingActivity()之前发生的唯一事情就是调用super.onCreate(savedInstanceState)。我用startActivityForResult(welcomeIntent, RESULT_WELCOME)调用活动。

我做错了什么?有没有其他方法来获取此信息?

6 个答案:

答案 0 :(得分:6)

这是一个已知问题:只有在同一任务中启动了活动时,getCallingActivity()才会返回实际数据(请参阅“任务和后退堆栈”教程)。正确启动结果活动也是如此(它们不能是单实例,也不能使用“FLAG_ACTIVITY_NEW_TASK”)。

答案 1 :(得分:3)

在与Intent一起使用的startActivityForResult()中传递额外信息,指明您想要的模式。在新启动的活动的getIntent().getXXXExtra()中,通过XXXonCreate()取决于您选择的数据类型)读取额外内容。

答案 2 :(得分:3)

每个人似乎都指向同样的解决方案,但没有人用明确的语言表达。 让我这样做。

似乎 getCallingActivity()在不同的Android平台上不一致地返回结果。

问题可能是因为您将活动的 launchMode 设置为 singleInstance singleTask 的。 将其设置为 singleTop 或将其保留为 标准 可以解决您的问题。 当然,更改模式不应影响您的使用案例,因此由您自行决定。

如果它确实影响了您的用例,您可以在意图的附加内容中传递包名称以简化操作。

请注意,在 Lollipop 版本中设置singleInstance或singleTask会返回非null 结果。

答案 3 :(得分:0)

您的通话活动可能比您预期的更早完成。这发生在我身上并导致getCallingActivity返回null,即使调用活动使用的是startActivityForResult

答案 4 :(得分:0)

当在清单中使用singleInstance作为启动模式声明活动时,我遇到了此问题。就我而言,我找到了一个没有这个声明的解决方案来解决问题。

答案 5 :(得分:0)

getCallingActivity可以返回null,具体取决于其他人指出的活动启动模式。我通过调用startActivityForResult传递getLaunchIntentForPackage()返回的意图来启动活动。默认情况下,它设置了FLAG_ACTIVITY_NEW_TASK标记,这导致getCallingActivity返回null。致电intent.setFlags(0)解决了我的问题。