小编Yip*_*Hon的帖子

intent.resolveActivity(getPackageManager()) 到底在做什么?

我正在阅读Android 开发人员教程,但遇到了一行我不明白的代码。

这是代码行(在 Android 开发者教程的第 4 页上找到。)

    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
Run Code Online (Sandbox Code Playgroud)

我有一些问题。

1)Intent.ACTION_VIEW 文档说它只是向用户显示数据。我了解它选择的应用程序将取决于要显示的数据类型。例如,在这种情况下,网页被解析为 uri 数据类型。但是这里创造了什么样的隐含意图?在后端,我是否可以将 Android 视为遍历手机中的所有类并查看哪个具有可能处理数据的意图过滤器并创建意图结构以启动它找到的此类?

2)如果找到多个可以处理这个问题的类会发生什么?它是简单地选择默认值还是要求用户选择它想要运行的应用程序?当我在手机上运行代码时,它只是默认启动了三星互联网应用程序。

3)这实际上是我的主要问题。如果意图已经链接到一个类来启动,为什么还要费心intent.resolveActivity(getPackageManager()) 呢?它的文档指定了如果返回一个类,它如何处理该类。好的,返回一个类。但它返回的这个类也没有“合并”在我intent的代码的任何行中,这让我认为Intent.ACTION_VIEW已经以某种方式为我处理了它。

这将是一个飞跃,但是我说Intent.ACTION_VIEW运行intent.resolveActivity(getPackageManager())或其他类似的函数并以某种方式将它返回的类合并到我的意图中是否正确?

4)另外,出于好奇,包管理器类里面有什么?我在这里读到它就像一个应用程序数据的目录。我这样说对吗?它保留了有关应用程序的哪些类型的数据,以及如何访问它们。该文档似乎没有多大帮助。

java android android-intent

12
推荐指数
2
解决办法
8525
查看次数

标签 统计

android ×1

android-intent ×1

java ×1