当前位置: 首页 > 知识库问答 >
问题:

Android——需要uri

宗晟
2023-03-14

我试图理解Android的意图机制,对一个我想解决的问题感到困惑。

Android为intent提供了动作数据类别

我想问为什么数据是URI

为什么一切都不能成为一种行为和行为的范畴?

URI有什么价值

我问所有这些也是因为当我看到像电话、消息和地图这样的应用程序时,他们都试图使用URI来获取一些可能通过EXTRAS获得的数据。

有人请帮我澄清Android意图机制的设计方面。

共有1个答案

何安宜
2023-03-14

为什么我们通常使用mime类型?要了解它背后是什么样的数据,不是吗?Android使用mimetype来了解哪个应用程序可能是处理特定文件的候选应用程序。

假设你在应用程序中创建了一个PDF文件,并且你想让安装在用户手机中的其他应用程序打开它,如果你不设置mime类型,Android无法理解哪个应用程序(它有时可以理解mime类型)可以完美地打开该文件,什么应用程序可以毫无问题地处理它。。。例如,短信应用程序如何处理这个文件?它可能会坠毁!

我们为什么需要数据?你应该说你想在哪里表演不?如果你想让一个应用程序编辑你的pdf文件,你可以发送一个动作,这样用户打开的应用程序就会知道“嘿,我可以编辑它!”。但是为什么setData()?正如你所说,我们可以使用putExtra,但是使用putExtra你需要知道数据所在的密钥和blablabla。一个对您的应用程序一无所知的应用程序如何正确处理它setData是一个独特的地方,您可以在这里找到应用程序正确处理操作所需的内容。

来自官方文档:

URI(一个URI对象),它引用要对其执行操作的数据和/或该数据的MIME类型。提供的数据类型通常由意图的行为决定。例如,如果操作是action_EDIT,那么数据应该包含要编辑的文档的URI。在创建意图时,除了URI之外,还必须指定数据的类型(其MIME类型)。例如,能够显示图像的活动可能无法播放音频文件,即使URI格式可能类似。因此,指定数据的MIME类型有助于Android系统找到接收您意图的最佳组件。然而,有时可以从URI推断MIME类型,尤其是当数据是content:URI时,它表示数据位于设备上,并由ContentProvider控制,这使数据MIME类型对系统可见。

要仅设置数据URI,请调用setData()。要仅设置MIME类型,请调用setType()。如有必要,可以使用setDataAndType()显式设置这两个参数。

注意:如果要同时设置URI和MIME类型,请不要调用setData()和setType(),因为它们都会使另一个的值为空。始终使用setDataAndType()设置URI和MIME类型。

 类似资料:
  • “元素形状没有必需的属性Android:layout_height” 和另一个错误: “元素形状没有必需的属性Android:layout_width” 我尝试设置和和,,错误消失了,但是我不能设置任何按钮将其作为背景...所以我不能以这种方式使用这个XML。 我应该把它们调成什么?

  • 问题内容: 我试图查看我的应用程序在材质设计上的外观,我想使用新的cards lib。我的问题是,这在我的gradle文件中给了我这个错误,我需要修复它。 我下载并安装了它。在终端显示我安装了1.7: 好 给我: 没有。我在这里找到了: 并将路径设置为Android Studio中“ JDK位置”下的“ SDK位置”首选项。但它不起作用-似乎仍然找不到JDK 7。 我正在使用Mac OSX 10.

  • 我正在学习Android Studio和youtube上的教程,如: https://www.youtube.com/watch?v=QAbQgLGKd3Y 假设我需要JavaJDK。 然而,当我在网站上浏览教程时: https://developer.android.com/training/basics/firstapp/creating-project.html 我能够设置并运行myfirs

  • 我已经检查了清单中的所有活动。xml文件中,所有活动都存在android:exported=“true”,但它始终显示此错误**清单合并失败:需要为元素显式指定android:exported 我的清单文件是 Gradle构建 等待早期响应

  • 当我从升级到时,我收到了这个错误。 错误 清单合并失败:android:导出需要显式指定。当相应组件定义了意图过滤器时,面向Android 12及更高版本的应用需要为指定显式值。有关详细信息,请参阅https://developer.android.com/guide/topics/manifest/activity-element#exported。

  • 当我将目标和编译SDK版本从30更改为31时,我得到一个错误。类似于这个问题,但没有答案。 错误:android:导出需要显式指定。针对Android 12及更高版本的应用程序需要指定一个显式值为时,相应的组件定义了一个意图过滤器。详见https://developer.android.com/guide/topics/manifest/activity-element#exported。 但是,