【发布时间】:2019-04-14 15:25:45
【问题描述】:
我正在浏览the Android Developer Tutorials,遇到了一行我看不懂的代码。
这是代码行(可在 Android 开发者教程的第 4 页找到。)
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
我有几个问题。
1) Intent.ACTION_VIEW documentation 表示它只是向用户显示数据。我了解它选择的应用程序将取决于要显示的数据类型。例如,在这种情况下,网页被解析为 uri 数据类型。但是这里创造了什么样的隐含意图?在后端,我是否可以将 Android 视为遍历我手机中的所有类并查看哪个具有可能处理数据的意图过滤器并创建意图结构以启动它找到的此类?
2) 如果它找到多个可以处理这个问题的类会发生什么?它是简单地选择默认值还是要求用户选择它想要运行的应用程序?当我在手机上运行代码时,它只是默认启动了三星互联网应用程序。
3) 这实际上是我的主要问题。如果意图已经与要开始的课程相关联,为什么还要打扰intent.resolveActivity(getPackageManager())?它的documentation 指定如果返回一个类,它如何处理该类。好吧,返回一个类。但它返回的这个类在我的代码的任何一行都没有“合并”在我的intent 中,这让我认为Intent.ACTION_VIEW 已经以某种方式为我处理了它。
这将是一个飞跃,但我说 Intent.ACTION_VIEW 运行 intent.resolveActivity(getPackageManager()) 或其他类似的函数并以某种方式将它返回的类合并到我的意图中是否正确?
4) 另外,出于好奇,package manager class 里面是什么?我读到here,它就像一个应用程序数据目录。我这样说对吗?它保留了关于应用程序的哪些数据,我该如何访问它们。文档似乎没有多大帮助。
【问题讨论】:
标签: java android android-intent