intent.resolveActivity(getPackageManager())究竟在做什么?
我正在浏览Android开发人员教程,我遇到了一行我不理解的代码。
这是代码行(可在 Android 开发人员教程的第 4 页上找到)。
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
我有几个问题。
1)文档说它只是向用户显示数据。我知道它选择的应用程序将取决于要显示的数据类型。例如,在这种情况下,网页被解析为 uri 数据类型。但是,这里正在创造什么样的隐含意图呢?在后端,我是否可以将Android视为遍历手机中的所有类,并查看哪一个具有可能处理数据的意图过滤器并创建意图结构以启动它找到的这个类?Intent.ACTION_VIEW
2)如果它找到多个可以处理这个问题的类会发生什么?它是简单地选择默认值还是要求用户选择要在其中运行的应用?当我在手机上运行代码时,它只是默认启动三星互联网应用程序。
3)这实际上是我的主要问题。如果意图已经链接到一个类开始,那么为什么要打扰呢?其文档指定在返回类时如何处理该类。好了,返回一个类。但是,它返回的这个类也没有“并入”在我的代码的任何一行中,这让我认为它已经以某种方式为我处理了它。intent.resolveActivity(getPackageManager())
intent
Intent.ACTION_VIEW
这将是一个飞跃,但是我说运行或其他函数做类似的并以某种方式将它返回的类合并到我的意图中是正确的吗?Intent.ACTION_VIEW
intent.resolveActivity(getPackageManager())
4)另外,出于好奇,包管理器类内部有什么?我在这里读到它就像一个应用程序数据的目录。我这么说是对的吗?它保留了有关应用程序的哪些类型的数据,以及我如何访问它们。文档似乎没有多大帮助。