如何检查Intent是显式还是隐式?

时间:2014-02-12 18:04:41

标签: android android-intent navigation-drawer

是否有一种简单的方法可以确定Intent是显式还是隐式?

我正在尝试使用the Android docs中建议的行为来实现导航抽屉,即应用程序启动时抽屉应自动打开,直到用户手动打开它为止。

但是,使用导航抽屉的活动可以从我的应用程序中的各个位置以及外部启动。我只想在从我的应用程序外部启动活动时打开抽屉,但我找不到一个简单的方法来找出意图的来源。


Intent中的一些方法最初看起来很有希望:

  • getComponent()似乎会在发送端(您已经知道的地方)提供信息(null / not null),但根据文档在接收端永远不会为空。
  • hasCategory()可用于查找已知类别的外部意图,例如android.intent.category.LAUNCHER。这可能是我最终使用的,但我宁愿有一个通用的解决方案,而不是试图在这里考虑每种可能性。
  • getPackage()看起来它可能做对了,但除非我没有正确使用它,否则我的测试中似乎总是返回null。

或者,我总是可以使用putExtra()为我的所有内部意图添加一个标志,但这感觉太像一个黑客,所以如果还有另一种选择,我宁愿避免它。

2 个答案:

答案 0 :(得分:3)

  

是否有一种简单的方法可以确定Intent是显式的还是隐式的?

考虑到你的其余问题,这不是你所需要的。你应该问的是:

  

如何从有限的麻烦中确定外部Intent内部getAction()次调用?

在这种情况下,对于许多应用,您可以使用此算法:如果nullIntent,则为内部显式Intent。否则,假设它是外部的。

如果由于各种原因,您正在使用操作字符串来启动本地活动(尽管还在Intent上设置组件并使其明确),那么您将需要回到“额外的“事情。通常,如果要使用显式null启动本地活动,则不会设置操作字符串,这会使操作字符串成为隐式(操作不是null)和显式(操作{之间的清晰描述符) {1}})。

答案 1 :(得分:0)

实现此目的的最佳方法是使用Intent传递额外内容,以识别调用它的Activity,就像您提到的那样。当您认为在Activity完成并且调用活动检查结果代码时经常检查Intents是否有静态标识符时,这并不是特别的黑客攻击。你的是检查调用Activity的相反情况。