【问题标题】:Why does the Main activity has an intent filter?为什么 Main 活动有一个意图过滤器?
【发布时间】:2017-05-21 22:04:40
【问题描述】:
  1. 如果意图过滤器是为了解决隐式意图,那么为什么 MainActivity(这是第一个运行的活动 应用程序已启动)是否有意图过滤器?
  2. 谁向它发送了隐含的意图?
  3. 如果发送的隐式意图没有正确的数据怎么办?

【问题讨论】:

    标签: android android-studio android-intent intentfilter android-implicit-intent


    【解决方案1】:
    1. 它有 CATEGORY_LAUNCHER 和 ACTION_MAIN 。 android.intent.action.MAIN 表示这个activity是应用程序的入口点,即当你启动应用程序时,这个activity就被创建了。 CATEGORY_LAUNCHER 告诉您的活动应该显示在顶级启动器中。

    https://developer.android.com/reference/android/content/Intent.html#ACTION_MAIN

    1. Launcher 向其发送隐含意图。这就是启动器如何知道单击时要打开哪个活动。

    2. 如果您发送不正确的数据,它将不会打开您的活动。例如: 如果您尝试仅在 startActivity 中使用隐式意图启动主要活动,那么它将不会启动,因为有 CATEGORY_DEFAULT 与之关联。您需要在您的活动中再添加一个 intent_filter 来解析意图。

    【讨论】:

      【解决方案2】:

      那么,系统如何知道哪个活动是主要活动?这不是名字——系统不关心名字。它是带有表示其主要活动的意图过滤器的活动。

      它还可以有其他意图过滤器以您可能想要的任何其他方式启动它。例如,您可能有一个意图过滤器来通过深层链接启动它。

      至于正确的数据——如果从应用列表或主屏幕启动,它不会有任何数据。它由应用程序的程序员来确保它可以在这种情况下做一些有意义的事情。

      【讨论】:

      • 1) 明白了。 2)知道了,例如,如果用户单击网站中的地址,我们的地图应用程序可以通过使用意图过滤器启动。我的理解正确吗?我可以知道深层链接是什么意思吗?
      • 移动设备的深层链接是指example.com/myUrl 之类的网址在应用而不是网页中打开活动。
      • 默认意图过滤器不会处理深层链接。为此,您需要创建一个单独的意图过滤器。
      • @DamanpreetSingh 我没说会。我说这是主要活动可以有过滤器的另一个原因。
      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多