这是我参与「第四届青训营 」笔记创作活动的第4天。
1. 初步了解Intent
据我所了解,Intent是可以用来从其他应用组件请求操作的消息传递对象。尽管Intent可以通过多种方式促进组件之间的通信,但它的基本用例主要包括下面几个:
- 启动服务:
Service是一个不使用用户界面而在后台执行操作的组件。若使用Android5.0(即API级别21)及更高版本,我们可以启动包含JobScheduler的服务。
- 启动Activity
Activity表示应用中的一个屏幕。通过将Intent传递给startActivity(),我们可以启动新的Activity实例。Intent用于描述要启动的Activity,并携带任何必要的数据。若我们想要在Activity完成后收到结果,则调用startActivityForResult()。在Activity的onActivityResult()回调中,我们的Activity将结果作为单独的Intent对象接受。
- 传递广播
我们可以通过Intent传递给sendBroadcast()或sendOrderBroadcast()将广播传递给其他应用。
2. Intent类型
Intent分为两种类型:
- 显式Intent:
通过提供目标应用的软件包名称或完全限定的组件类名来指定可处理Intent的应用。通常,我们会在自己的应用中使用显式Intent来启动组件,这么做事因为我们知道要启动的Activity或服务的类名。举例,我们可能会启动自己应用内的新Activity以响应用户操作,或者启动服务以在后台下载文件。
-隐式Intent
不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理。举例子,如果需要在地图上向用户显示位置,则可以使用隐式Intent,请求另一具有此功能的应用在地图上显示指定的位置。
我们使用隐式Intent时,Android系统通过将Intent的内容与在设备上其他应用的清单文件中声明的Intent 过滤器进行比较,从而找到要启动的相应组件。若是Intent与Intent过滤器匹配,则系统将启动该组件,并向其传递 Intent 对象。而如果多个Intent过滤器兼容,则系统会显示一个对话框,支持用户选取要使用的应用。