【Java与智能设备】ch0501 Intent的使用

Intent概述

概念

  1. Activity基本设计理念是:减少组件间的耦合;因此在Android中提供了Intent来实现在应用程序组件与组件之间交互。

高内聚,低耦合

  1. Intent:意图, 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述;Android根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
  2. Intent最主要的作用就是,使用Intent启动三大核心组件 活动(Activity)、服务(Service)和广播接收器(BroadcastReceiver),

四大核心组件:Activity,BroadcastReceiver,Service,ContentProvider


intent对各个组件

【Java与智能设备】ch0501 Intent的使用


Intent组成

  1. Component(组件):目的组件。
  2. Action (动作):用来表现意图的行动。
  3. Category (类别)ArrySet:用来表现动作的类别。
  4. Data (数据):表示与动作要操纵的数据。
  5. Type (数据类型):对于data范例的描写。
  6. Extras (扩展信息)Bundle:扩展信息。
  7. Flags (标志位)int:期望这个意图的运行模式。

Intent 的使用

  1. 显式Intent对象:直接指明Intent的目的组件

如直接给Component 赋值

  1. 隐式Intent对象:没有直接指明Intent目的组件,而是通过Intent其它属性来隐式指出Intent待加载的组件类

    这里的其他组件指的是 Action Category Data Type



显式Intent

显式Intent:明确指定了当前Intent应该传递给哪个组件的Intent。

使用方法

  1. setClass(Context packageContext, Class<?> cls)
  2. setClassName(Context packageContext, String className),(content,目的组件的全限定名)
  3. setClassName(String packageName, String className),(目的组件所在的Pakage名,目的组件的全限定名)

    这个方法可以调用其他App的Activity(目标Activity),需要在manifest中将目标Activity的exported属性设置为true,这样表示可以被其他程序调用



隐式Intent

隐式Intent:未明确指明待加载的组件类,但是在Intent属性中给出了待加载组件需要满足的特征。那么对应被启动的组件中接受此种属性。

  • 组件的特征取决于在Activity配置中<intent-filter…/>元素的配置。<intent-filter…/>就是用于描述Intent的各种属性, <intent-filter…/>元素通常可包含如下子元素。
    • 0~N个 <action…/> 子元素
    • 0~N个 <category…/> 子元素
    • 0~1个 <data…/> 子元素
  • Action和Category属性都是普通的字符串,Action代表想要完成的一个“动作”,Category代表此动作的额外信息。
  • 被启动的组件是不明确的,取决于Activity的<intent-filter…/>属性。例如:我提供的Action是=“com.example.intent.AAA”,那么就启动指定intent-filter的组件。Action和Category属性要结合使用

Action属性使用时注意事项:

  1. Intent对象只能设定一个Action属性;表明某一个Intent只能加载一个组件。
  2. 若Intent为隐式Intent,且指明了Action属性,则待加载组件必须在AndroidManifest.xml文件中进行注册,且添加< intent-filter>元素并声明< action>子元素。
  3. 在AndroidManifest.xml文件中,一个组件的< intent-filter>元素中可以包含多个< action>子元素,表明该组件可以被不同的Intent加载。
  4. Action属性值可以使用内置的,也可以使用用户自定义的。
  5. 若符合Intent对象的待加载组件有多个,将以列表形式显示出来以供用户选择。

Category属性使用时注意事项:

  1. Intent对象可以添加多个Category属性;使用addCategory( )和removeCategory( )来添加或删除属性。ArraySet()
  2. 若Intent为隐式Intent,且指明了Category属性,则待加载组件需要在AndroidManifest.xml文件中进行注册,且添加< intent-filter>元素声明< category>子元素。
  3. 在AndroidManifest.xml文件中,一个组件的< intent-filter>元素中可以包含多个< category>子元素。
  4. category属性值可以使用内置的,也可以使用用户自定义的。
  5. 若Intent对象指明了action属性,但未指明category属性,则使用默认的category属性Intent.DEFAULT

    android.intent.category.DEFAULT

【Java与智能设备】ch0501 Intent的使用