我正在学习Android开发教程,遇到了一行不理解的代码。
这就是那行代码(在Android开发教程的第四页找到)。
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
我有几个问题。
1)Intent.ACTION_VIEW
的文件说明它只是将数据显示给用户。我明白它选择的应用程序取决于要显示的数据类型。例如,在这种情况下,网页被解析为uri数据类型。但是在此处创建了什么样的隐式意图?在后端中,我可以认为Android会浏览我手机中的所有类,并查看哪一个有可能处理数据的意图过滤器,并创建启动找到的类的意图结构吗?
2)如果找到多个可以处理它的类,会发生什么?它是否只选择默认值或要求用户选择要运行的应用程序?当我在我的手机上运行代码时,它只是默认启动三星互联网应用程序。
3)这实际上是我的主要问题。如果意图已经链接到要启动的类,那么为什么要使用 intent.resolveActivity(getPackageManager())
呢? 它的文档指定了它如何处理返回类。所以好吧,类被返回。但是,它返回的这个类在我的任何代码行中都没有“合并”到我的 intent
中,这让我认为 Intent.ACTION_VIEW
已经为我处理了它。
这可能有些牵强,但是我是否可以这样说: Intent.ACTION_VIEW
运行了 intent.resolveActivity(getPackageManager())
或另一个类似的函数,并且在某种程度上将其返回的类合并到我的意图中?
4)此外,出于好奇,包管理器类中有什么?我在这里看到它就像一个应用程序数据目录。我这样说对吗?它保存有关应用程序的哪些数据,以及如何访问它们。文档似乎没有提供太多帮助。