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

jus*_* me 3 android android-intent navigation-drawer

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

我正在尝试实现一个具有Android 文档中推荐的行为的导航抽屉,即抽屉应在应用程序启动时自动打开,直到用户手动打开它。

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


有几种方法Intent最初看起来很有希望:

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

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

Com*_*are 6

有没有一种简单的方法来确定 Intent 是显式的还是隐式的?

鉴于您的问题的其余部分,这不是您所需要的。你真正应该问的是:

如何Intent以有限的麻烦确定内部调用和外部调用?

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

如果由于各种原因,您使用操作字符串来启动本地活动(尽管还设置了组件Intent并使其显式化),那么您将需要回退到“附加额外内容”。通常,如果您使用显式启动本地活动Intent,则不会设置操作字符串,这使得操作字符串成为隐式(action not null)和显式(action null)之间的清晰划分符。