2011-11-27 226 views
1

我有一个欢迎屏幕,可以作为我的应用中的第一个活动启动,或者可以由用户花时间在主要活动启动。我希望它从主屏幕开始时的行为稍有不同(或任何其他应用程序)或主要活动。为什么getCallingActivity总是返回null?

在onCreate中调用getCallingActivity()似乎总是返回null,而不管所谓的活动。这很奇怪,因为它早些时候工作,这是我如何找到字符串返回的格式(它应该在文档中)。我看不出会有什么影响,因为在致电getCallingActivity()之前发生的唯一情况是呼叫super.onCreate(savedInstanceState)。我打电话给startActivityForResult(welcomeIntent, RESULT_WELCOME)

我在做什么错?有没有其他的方法来获取这些信息?

回答

3

在与startActivityForResult()一起使用的Intent中传递一个额外值,指示您想要的模式。通过getIntent().getXXXExtra()XXX取决于您选择的数据类型)在新开始的活动的onCreate()中阅读该额外内容。

+0

啊,当然。现在很明显,你提到它。不过,你知道为什么我描述的方法不起作用吗? – AlbeyAmakiir

+2

@AlbeyAmakiir:不,我期望'getCallingActivity()'工作。这就是说,额外的Intent方法更灵活一些 - 它可以在重构后存活下来,例如,如果您重命名或移动调用活动,则需要更新您的getCallingActivity()逻辑以进行匹配。 – CommonsWare

+0

你在这个答案中提到了哪些模式?谢谢 – Eenvincible

0

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

0

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

6

这是一个已知问题:getCallingActivity()仅当活动在同一任务中启动时才返回实际​​数据(请参阅“任务和返回堆栈”教程)。正确地开始结果活动也是同样的(它们不能是单实例,并且不能使用“FLAG_ACTIVITY_NEW_TASK”)。

+2

这适用于我的情况。 –

3

每个人似乎都指向相同的解决方案,但没有人用清晰的文字说出来。 让我这样做。

看起来好像getCallingActivity()在不同的android平台上返回结果不一致。

问题,因为你是你设定活动的launchMode singleInstance singleTask可能是造成。 将其设置为 singleTop或离开它作为标准一个应该解决您的问题。 当然,更改模式不应该影响您的用例,因此您可以自行决定。

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

请注意,设置singleInstance或singleTask返回非空结果上棒棒糖释放。

相关问题