为什么我们会得到这些“无效”的意图?

时间:2016-09-05 10:02:24

标签: android android-intent

我们有一个可以通过两种方式启动的应用程序:

  • 来自其他活动 - 始终填写一些额外数据
  • 来自深层链接

据我所知,这总是很好。我们要么使用数据URI获取Intent.ACTION_VIEW,要么获得一些字符串附加信息。

但是,我们只有极少数情况下,操作为Intent.ACTION_MAIN并且没有额外数据。

Intent的toString()如下(类名更改):

Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10400000 cmp=com.example.OurActivity }

Intent.getExtras()返回null,Intent.getDataString()返回null。

在哪种情况下会发生这种情况?为什么活动Intent.CATEGORY_LAUNCHER的类别?我们如何获得向用户显示正确内容所需的数据?

未为活动指定

launchModeIntentFilter中唯一的AndroidManifest.xml用于深层链接(而不是启动器类别)。

问题发生在Android 4-6的各种设备上。

编辑:忘记提及标志:

由于打印输出表明意图的标志是FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_BROUGHT_TO_FRONT。我想这可能与此有关。

2 个答案:

答案 0 :(得分:1)

我相信,我钉了它:

Nova Launcher之类的发射器允许用户以任何应用程序的Activities开头,而不是正常流程:

enter image description here

例如,您可以在桌面上添加快捷方式,以使用帐户设置活动启动Gmail客户端。

在这种情况下,正在使用空Extras启动活动,从技术上讲,它将成为启动器的Activity

答案 1 :(得分:0)

既然AndroidManifest.xml是由构建系统操纵的,那么你所包含的库经常会在清单中添加内容,我怀疑这可能会在这里发生。

虽然您声明清单中只有一个IntentFilter,但您是否实际检查过已安装的应用程序以查看其清单所显示的内容(而不是依赖于您认为放在源代码中的内容)?

Play商店中提供了各种应用程序,以显示已安装应用程序的清单 - 包括App Detective(我写过)。