内容正文:
第7章 理解和使用 Intent
Android Studio 移动应用开发基础(第 2 版)
目录
7.1 Intent 入门
7.2 同步练习一 .
7.3 细说 Intent
7.4 Intent 解析
7.5 获取 Activity 返回的结果
7.6 Intent 的综合应用案例
7.7 同步练习二
7.8 广播消息和广播接收器 .
7.9 同步练习三 .
7.3.3 Intent 的 category
category 的含义是类别,它是 Android 对 Activity 进行分类的一种手段。Intent 中预定义了一些 category,常用的 category 包括 Intent.CATEGORY_DEFAULT、Intent.CATEGORY_LAUNCHER 、 Intent.CATEGORY_HOME 、Intent.CATEGORY_PREFERENCE、Intent.CATEGORY_CAR_DOCK、Intent.CATEGORY_APP_MARKET 等;
这个案例获取所有出现在 HOME 屏幕上的 Activity:
7.3.4 Intent 的 extra
extra 只作为传递给目标 Activity 的附加数据,不作为挑选 Activity的匹配依据;
extra 是以 key/value 形式表示的数据,其中的 key 是 String 类型的键,value 可以是 Java基本数据类型,也可以是实现了 android.os.Parcelable 接口的对象数据类型。Intent 提供了写入及读取基本数据类型数据的方法。
7.4 Intent 解析
Intent 对象与<intent-filter>标签是密切相关的:在使用 Intent 对象启动某个 Activity 时,必须将 Intent 对象中设置的属性(action、data 和 category)与<intent_x0002_filter>标签中配置的属性进行匹配,从而启动能够匹配的 Activity。将这种匹配操作称为Intent 解析。
(1)在显式匹配中,在 Intent 对象中明确指定要启动的 Activity 的名称,方法包括 new Intent(Context packageContext, Class<?> cls)、setComponent(ComponentName)、setClass(Context, Class)。
(2)在隐式匹配中,分为以下几种情况。
如果在 Intent 对象中设置了 action 且设置的 action 出现在<intent-filter>标签中,或者在<intent-filter>标签中未设置任何 action,则匹配;如果在 Intent 中未设定 action,则匹配所有的 Activity。
如果在 Intent 对象中设置了 data 且设置的 data 出现在<intent-filter>标签中,则匹配;如果在 Intent 对象中未设置 data,则只能匹配未设置 data 的 Activity。
如果在 Intent 对象中设置了 category 且设置的 category 出现在<intent-filter>标签中,则匹配;如果在 Intent 对象中未设置 category,则只能匹配未设置 category 的 Activity。
7.5 获取 Activity 返回的结果
如果需要获取被对象的 Activity 返回的结果。在使用 startActivityForResult()方法启动 Activity 时,在被启动的 Activity(称为目标 Activity)执行完毕后,Android 平台会调用源 Activity 的 onActivityResult()方法;
startActivityForResult()方法的原型如下:
在目标 Activity 执行完毕后,Android 平台会启动者调用 onActivityResult()方法。方法的原型如下:
目标 Activity 使用setResult()方法设置返回结果。setResult()方法的原型如下:
举例说明如何启动一个 Activity,并且接收从目标 Activity 返回的结果;
该案例应用程序运行效果的首界面,点击按钮,界面中会显示两张图片,此时,点击任意一张图片,都可以关闭该 Activity,并且在首界面中显示所点击图片的编号;
新建名为 Ch0702 的 Android 应用程序工程。修改主界面布局文件 res/layout/activity_main.xml 中的代码:
在 res/layo