Android 显式意图、隐式意图和广播

Android 显式意图、隐式意图和广播,android,android-intent,Android,Android Intent,我正试图更好地理解意图这个话题 使用组件的名称配置显式意图。在我看到的每个示例中,它都用于启动或停止组件。这是明确意图的唯一目的吗 隐式意图没有目标组件。隐式意图也可以启动/停止组件,但广播接收器也可以接收它们。是否有另一种方式来接收隐含的意图 当操作系统发送意图并将操作设置为action.MAIN时,这是一个明确的意图,对吗 谢谢 这是明确意图的唯一目的吗 意图通常用于: 开始一项活动 启动或停止服务 广播 明确的意图可用于其中任何一项 隐式意图也可以启动/停止组件,但广播接收器也可以接收

我正试图更好地理解意图这个话题

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

隐式意图没有目标组件。隐式意图也可以启动/停止组件,但广播接收器也可以接收它们。是否有另一种方式来接收隐含的意图

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

谢谢

这是明确意图的唯一目的吗

意图通常用于:

  • 开始一项活动
  • 启动或停止服务
  • 广播
明确的
意图
可用于其中任何一项

隐式意图也可以启动/停止组件,但广播接收器也可以接收它们

Intent
是隐式的还是显式的,与
Intent
的角色类型无关

是否有另一种方式来接收隐含的意图

一个隐含的
意图
服务于上面列出的角色。不过,您通常不会看到它用于启动和停止服务

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


不一定。如果“操作系统”指的是“主屏幕”,而“将操作设置为action.MAIN时发送意图”,则指的是“根据用户点击启动器中的图标启动活动”,那么这是一个明确的
意图
,用于标识要启动的特定活动。显式的
Intent
可以有一个动作字符串,因此使
Intent
显式的不是
action\u MAIN

来自android文档:

显式意图指定以名称开头的组件( 完全限定类名)。您通常会使用明确的意图 在您自己的应用程序中启动组件,因为您知道类名 要启动的活动或服务的名称。例如,开始一个新的项目 响应用户操作的活动或启动服务以下载 文件在后台

隐式意图不命名特定组件,而是声明 要执行的常规操作,允许来自其他应用程序的组件 来处理它。例如,如果要向用户显示上的位置 一个映射,您可以使用隐式意图请求另一个 应用程序在地图上显示指定位置

正如您所说,显式意图用于启动应用程序中的活动,或者从一个“屏幕”过渡到另一个“屏幕”。明确的意图类似于
intent intent=newintent(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应用程序等。因此,基本上,您只需指定一个常规操作,并询问系统“谁可以处理此问题”,系统将处理其余的问题。应用程序开发人员使用这些类型的意图,因此如果设备上已经有某种东西可以满足开发人员的需求,他们就不必“重新发明轮子”

以下是一些可能有助于更好地解释它的参考资料:


顾名思义,意图-->这是一种“意图”去做一件事

这是一种发送消息以执行其他应用程序或O.S.可以监听的操作的方式

在明确的意图中,你知道由哪个人或哪个阶层来完成哪个工作


在含蓄的意图中,你只是要求一项工作去做。。。所有能够执行共享消息等活动的应用程序都将显示在列表中,您可以从其中任何一个应用程序执行工作。

Intent是一个用于android组件(活动、服务、广播接收器、内容提供者)和操作系统之间通信的对象

根据我们打算做什么,Intent类提供了各种构造函数

在某种情况下,Intent会向ActivityManager发送启动哪个活动的请求。ActivityManager是操作系统的一部分

现在问题来了,为什么我们需要应用程序外部的ActivityManager在应用程序内部的两个活动之间进行通信。这里是隐式和显式意图的概念

显式意图:为了实现一个应用程序中组件(活动)之间的通信,我们使用显式意图。 将当前日期从一个活动发送到另一个活动

隐式意图:在不同应用程序的活动之间进行通信。 例如,一个应用程序从gallery应用程序请求照片

在隐含意图的情况下,ActivityManager使事情变得更容易