显式意图,隐式意图和广播

时间:2014-01-02 18:17:40

标签: android android-intent

我正在努力更好地理解意图的主题。

使用组件名称配置显式意图。在我看过的每个例子中,它都用于启动或停止组件。这是明确意图的唯一目的吗?

隐式意图没有目标组件。隐式意图也可以启动/停止组件,但它们也可以由BroadcastReceivers接收。是否有其他方式可以获得隐含意图?

当操作系统发送动作设置为Action.MAIN的意图时,这是一个明确的意图,对吗?

感谢。

4 个答案:

答案 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

http://www.vogella.com/articles/AndroidIntent/article.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.监听的操作的方式。

在明确意图中,您知道由哪个人或班级执行哪项工作。

在隐含意图中,您只需要做一项工作......所有能够进行活动的应用程序(如共享消息)都将显示在列表中,您可以从其中任何一个开始工作。