为什么getCallingActivity总是返回null?

Alb*_*iir 2 android android-activity

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

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

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

Dog*_*cat 7

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


Com*_*are 5

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

  • @AlbeyAmakiir:不,我希望`getCallingActivity()` 能够工作。话虽如此,“Intent”额外方法更加灵活——它可以在重构中幸存下来,例如,如果您重命名或移动调用活动,您将需要更新您的“getCallingActivity()”逻辑以匹配。 (2认同)
  • @CommonsWare,请原谅我的天真——出于某种奇怪的原因,我认为主要问题是“为什么 getCallingActivity 总是返回 null?”。愚蠢的我。 (2认同)

小智 5

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

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

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

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

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