我正在努力更好地理解意图的主题。
使用组件名称配置显式意图。在我看过的每个例子中,它都用于启动或停止组件。这是明确意图的唯一目的吗?
隐式意图没有目标组件。隐式意图也可以启动/停止组件,但它们也可以由BroadcastReceivers接收。是否有其他方式可以获得隐含意图?
当操作系统发送动作设置为Action.MAIN的意图时,这是一个明确的意图,对吗?
感谢。
答案 0 :(得分:8)
来自android文档:
显式意图指定组件以名称开头( 完全合格的班级名称)。您通常会使用明确的意图 在您自己的应用中启动组件,因为您知道类名 您想要开始的活动或服务。例如,开始一个新的 响应用户操作或启动服务下载的活动 文件在后台。
隐式意图不命名特定组件,而是声明 要执行的常规操作,允许来自其他应用的组件 处理它。例如,如果要向用户显示位置 一个地图,你可以使用一个隐含的意图来请求另一个能够 app在地图上显示指定的位置。
正如您所说,显式意图用于在您的应用程序中启动活动 - 或从一个“屏幕”转换到另一个“屏幕”。显式意图类似于Intent intent = new Intent(currentContext, ActivityB.class);
当您在应用程序中时,会使用这些类型的意图,并根据用户与您的活动的交互方式明确知道您要启动哪个组件。
隐式意图不直接指定应该调用的Android组件,而只是指定要执行的一般操作。当您希望某些外部应用程序为您执行某些操作时,通常会使用这些。用于使用外部应用程序发送电子邮件的隐式意图的示例是:
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"someemail@gmail.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject");
i.putExtra(Intent.EXTRA_TEXT , "body");
此意图将查询设备上安装的可以处理发送电子邮件的应用程序,但可能有相当多的应用程序可以执行此操作 - 例如,如果我们有gmail应用程序,hotmail应用程序等。所以,基本上你只是指定一般动作并询问系统“谁可以处理这个”,系统将处理剩下的事情。这些类型的意图由应用程序开发人员使用,因此如果设备上已经存在可以执行开发人员想要的操作,则他们不必“重新发明轮子”。
以下是一些可能有助于更好地解释它的参考资料:
http://developer.android.com/guide/components/intents-filters.html
答案 1 :(得分:3)
这是明确意图的唯一目的吗?
Intent
通常用于:
明确的Intent
可以用于其中任何一个。
隐式意图也可以启动/停止组件,但也可以由BroadcastReceivers接收。
Intent
是隐式的还是显式的,与Intent
所用的角色无关。
是否有其他方式可以获得隐含意图?
隐式Intent
服务于上面列出的角色。但是,您通常不会将其用于启动和停止服务。
当操作系统发送动作设置为Action.MAIN的意图时,这是一个明确的意图,对吗?
不一定。如果“操作系统”是指“主屏幕”,并且“通过动作设置为Action.MAIN发送意图”,则表示“根据用户点击启动器中的图标启动活动”,然后这是一个明确的Intent
,用于标识要启动的特定活动。明确的Intent
可以有一个操作字符串,因此ACTION_MAIN
不是Intent
显式的。{/ p>
答案 2 :(得分:1)
Intent是一个对象,用于任何android组件(Activity,Services,BroadcastReceiver,ContentProvider)和操作系统之间的通信。
Intent Class根据我们打算做的事情提供各种构造函数。
在一个案例中,Intent向ActivityManager发送请求以启动哪个活动。 ActivityManager是操作系统的一部分。
现在的问题是,为什么我们需要在我们的应用程序之外的ActivityManager来在应用程序内部的两个活动之间进行通信。这是Implicit和Explicit Intent的概念。
显式意图:要在一个应用程序中的组件(活动)之间进行通信,我们使用显式意图。 例如。将当前日期从一个活动发送到另一个活动。
隐含意图:在不同应用程序的活动之间进行通信。 例如。一个应用程序从图库应用程序请求照片。
在Implicit Intent的情况下,ActivityManager使事情变得更容易。
答案 3 :(得分:0)
顾名思义意图 - >这是行动的“意图”。
这是一种发送消息以执行可由其他应用程序或O.S.监听的操作的方式。
在明确意图中,您知道由哪个人或班级执行哪项工作。
在隐含意图中,您只需要做一项工作......所有能够进行活动的应用程序(如共享消息)都将显示在列表中,您可以从其中任何一个开始工作。