Android 为什么getCallingActivity总是返回null?

Android 为什么getCallingActivity总是返回null?,android,android-activity,Android,Android Activity,我有一个欢迎屏幕,可以作为我应用程序中的第一个活动启动,也可以由用户花费时间的主要活动启动。我希望当它从主屏幕(或任何其他应用程序)或主活动启动时,它的行为略有不同 在onCreate中调用getCallingActivity()似乎总是返回null,而不管调用了什么活动。这很奇怪,因为它在前面确实起作用了,这就是我如何找到字符串返回的格式(无论如何应该在文档中)。我看不出是什么影响了它,因为在调用getCallingActivity()之前唯一发生的事情就是调用super.onCreate(s

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

在onCreate中调用
getCallingActivity()
似乎总是返回null,而不管调用了什么活动。这很奇怪,因为它在前面确实起作用了,这就是我如何找到字符串返回的格式(无论如何应该在文档中)。我看不出是什么影响了它,因为在调用
getCallingActivity()
之前唯一发生的事情就是调用
super.onCreate(savedInstanceState)
。我通过
startActivityForResult(欢迎光临,欢迎光临)
调用此活动


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

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

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

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

这是一个已知的问题:getCallingActivity()仅当活动已在同一任务中启动时才返回实际数据(请参阅“任务和后台堆栈”教程)。正确启动活动以获得结果也是如此(它们不能是单个实例,也不能使用“FLAG\u ACTIVITY\u NEW\u TASK”)。

每个人似乎都指向同一个解决方案,但没有人明确地说出来。 让我来吧

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

问题可能是因为您将活动的启动模式设置为singleInstance或singleTask。 将其设置为singleTop或将其作为标准设置应该可以解决您的问题。 当然,更改模式不应该影响您的用例,因此这是您的决定

如果它确实影响到您的用例,您可以在额外的意图中传递包名以简化事情


请注意,设置singleInstance或singleTask会在棒棒糖发布时返回非null结果。

getCallingActivity
可以返回
null
,具体取决于其他人指出的活动启动模式。我是通过调用
startActivityForResult
来启动活动的,传入
getLaunchIntentForPackage()
返回的意图。默认情况下,它设置了
FLAG\u ACTIVITY\u NEW\u TASK
标志,这导致
getCallingActivity
返回
null
。调用
intent.setFlags(0)
为我解决了这个问题。

啊,当然。很明显,你提到了这件事。然而,你知道为什么我描述的方法不起作用吗?@AlbeyAmakiir:不,我希望
getCallingActivity()
能起作用。这就是说,
Intent
额外的方法更灵活一点——它将在重构中幸存下来,例如,如果您重命名或移动调用活动,则需要更新您的
getCallingActivity()
逻辑以匹配。您在回答中指的是哪些模式?Thanks@Eenvincible:问题中的问题(“当它从主屏幕(或任何其他应用程序)或主活动启动时,我希望它的行为略有不同。”@commonware,请原谅我的天真-出于某种奇怪的原因,我认为主要问题是“为什么getCallingActivity总是返回null?”。愚蠢的我。这个设置标志应该在启动应用程序或接收应用程序时调用吗?从App1 startActivityForResult(…)调用时,我尝试将标志设置为0,但在App2中,我仍然具有getCallingActivity=null以及getCallingPackage()。。