第 23 章 深入学习 intent 和任务 (选讲)

本章将使用隐式intent,创建一个启动器应用来替换Android默认的启动器应用。

23.1 创建 NerdLauncher 项目

使用与创建CriminalIntent应用相同的设置,创建一个新项目,如图23-1所示。项目名称处填入NerdLauncher,包名处填入com.jet.nerdlauncher。

图23-1 创建NerdLauncher项目

单击Next按钮,选择EmptyActivity,创建一个名为NerdLauncherActivity的全新activity,最后单击Finish按钮完成项目的创建。

NerdLauncherActivity将会继承SingleFragmentActivity类,因此,首先需要将它添加到当前项目中。

另外我们还需要activity_fragment.xml布局。因此,再将CriminalIntent项目中的res/layout/activity_fragment.xml文件复制到NerdLauncher项目的res/layout目录中。

NerdLauncher将以列表的形式显示设备上的应用。用户点击任意列表项将启动相应的应用。以下是该应用涉及的对象。

NerdLauncherFragment是ListFragment的子类,它的视图默认为ListFragment自带的ListView视图。

以android.support.v4.app.ListFragment为父类,创建一个名为NerdLauncherFragment的新类。暂时先不理会新建的空类。

打开NerdLauncherActivity.java文件,修改NerdLauncherActivity的超类为SingleFragmentActivity类。然后删除默认的模板代码,并覆盖createFragment()方法返回一个NerdLauncherFragment,如代码清单23-1所示。

代码清单23-1 另一个SingleFragmentActivity(NerdLauncherActivity.java)

23.2 解析隐式 intent

NerdLaucher应用会以列表的形式向用户展示设备上的应用。要实现该功能,它将发送一个所有应用的主activity都会响应的隐式intent。

在NerdLauncherFragment.java中,覆盖onCreate(Bundle)方法创建一个隐式intent。然后,从PackageManager中获取匹配intent的activity列表。当前,先以日志记录下PackageManager返回的activity数,如代码清单23-2所示。

代码清单23-2 向PackageManager查询activity数(NerdLauncherFragment.java)

运行NerdLauncher应用,在LogCat日志窗口查看PackageManager返回的activity数目。

接下来,我们需要将查询到的activity标签显示在NerdLauncherFragment的ListView视图中。activity的标签即用户可以识别的显示名称。既然查询到的activity都是启动activity,标签名通常也就是应用名。

在PackageManager返回的ResolveInfo对象中,可以获取activity的标签和其他一些元数据。

首先,添加如下代码对PackageManager返回的ResolveInfo对象按标签(使用ResolveInfo.loadLabel(...)方法)的字母顺序进行排序,如代码清单23-3所示。

代码清单23-3 按字母顺序对activity进行排序(NerdLauncherFragment.java)

然后,为创建显示activity标签名的简单列表项视图,还需创建一个ArrayAdapter并设置给ListView,如代码清单23-4所示。

代码清单23-4 创建一个适配器(NerdLauncherFragment.java)

运行NerdLauncher应用。我们将看到一个显示了activity标签的ListView视图,如图23-2所示。

图23-2 设备上的全部activity

23.3 在运行时创建显式 intent

接下来就是实现用户点击任一列表项时,启动该列表项的activity。我们将使用显式intent来启动activity。

要创建显式intent,还需从ResolveInfo对象中获取更多数据信息。特别是需要知道activity的包名与类名。这些信息可以从ResolveInfo对象的ActivityInfo中获取。(从ResolveInfo类中还可以获取其他哪些信息,具体请查阅该类的参考文档。)

在NerdLauncherFragment.java中,覆盖onListItemClick(...)方法,取得列表项的ActivityInfo对象。然后,使用ActivityInfo对象中的数据信息,创建一个显式intent并启动目标activity,如代码清单23-5所示。

代码清单23-5 实现onListItemClick(...)方法(NerdLauncherFragment.java)

从以上代码可以看到,作为显式intent的一部分,我们还发送了ACTION_MAIN操作。发送的intent是否包含操作,对于大多数应用来说没有什么差别。不过,有些应用的启动行为可能会有所不同。取决于不同的启动要求,同样的activity可能会显示不同的用户界面。开发人员最好能明确启动意图,以便让activity完成它应该完成的任务。

运行NerdLauncher应用并尝试启动一些应用。

时间: 2024-10-12 04:08:33

第 23 章 深入学习 intent 和任务 (选讲)的相关文章

JavaScript高级程序设计(第三版)学习笔记20、21、23章

第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值:字符串,数值,布尔值,null,不支持js特殊值:undefined 对象:一组无序的键值对 数组:一组有序的值的列表 不支持变量,函数或对象实例 注:JSON的字符串必须使用双引号,这是与JavaScript字符串最大的区别 对象 { "name":"Nicholas"

第23章 CSS边框图片效果

本章学习日后开发使用参考一下内容 https://www.qianduan.net/css3border-image-bian-kuang-tu-xiang-xiang-jie/ 或W3C 或者百度 未排版的PDF转WORD(不想排版了) 第 23章 CSS3边框图片效果学习要点:1.属性初探2.属性解释3.简写和版本 本章主要探讨 HTML5中 CSS3中边框图片背景的效果,通过这个新属性让边框更加的丰富多彩.一.属性解释CSS3提供了一个新的属性集合,用这几个属性可以嵌入图片形式的边框.这样

第23章、OnFocuChangeListener焦点事件(从零开始学Android)

在Android App应用中,OnFocuChangeListener焦点事件是必不可少的,我们在上一章的基础上来学习一下如何实现. 基本知识点:OnFocuChangeListener事件 一.界面 打开“res/layout/activity_main.xml”文件. 1.分别从工具栏向activity拖出2个编辑框EditText.控件来自Form Widgets. 2.打开activity_main.xml文件. [html] view plaincopy <LinearLayout

《机器学习》第三章 决策树学习 笔记加总结

<机器学习>第三章 决策树学习 决策树学习方法搜索一个完整表示的假设空间,从而避免了受限假设空间的不足.决策树学习的归纳偏置是优越选择较小的树. 3.1.简介 决策树学习是一种逼近离散值目标函数的方法,在这种方法中学习到的函数被表示为一棵决策树. 决策树(Decision Tree)是一种简单但是广泛使用的分类器.通过训练数据构建决策树,可以高效的对未知的数据进行分类. 决策数有两大优点: 1)决策树模型可以读性好,具有描述性,有助于人工分析: 2)效率高,决策树只需要一次构建,反复使用,每一

【RL-TCPnet网络教程】第23章 RL-TCPnet之地址解析协议ARP

第23章      RL-TCPnet之地址解析协议ARP 本章节为大家讲解ARP(Address Resolution Protocol,地址解析协议),通过前面章节对TCP和UDP的学习,需要大家对ARP也有个基础的认识. (本章的知识点主要整理自网络) 23.1  初学者重要提示 23.2  ARP基础知识参考资料 23.3  ARP基础知识点 23.4  ARP函数 23.5  总结 23.1  初学者重要提示 通过前面几个章节对TCP和UDP的学习,需要初学者对ARP的基础知识点也有个

4.26日第14次作业,23章项目整体绩效评估,24-32章信息安全相关知识

一.23章:项目整体绩效评估 1.三E审计是什么的合称?(记)P524 答:三E审计是经济审计.效率审计和效果审计的合称,因为三者的第一个英文字母均为E,顾称为三E审计. 2.霍尔三维结构是从哪三个方面考察系统工程的工作过程的?P527-528 答:霍尔三维结构是霍尔(A Hall)提出的关于系统方法论的结构,它从逻辑.时间.知识三方面考察系统工程的工作过程. 3.投资回收期的公式?(记,并理解)P533答:投资回收期的公式:(累计净现金流量出现正值的年份-1) + (上年累计净现金流量值的绝对

第二章 开始学习C++

第二章  开始学习C++ 2.1  main函数 简单代码如下: #include <iostream> int main() { //This is my first program using namespace std; cout << "Hello C++!" << endl; return 0; } C++中所有的语句都以分号(;)结束.return 0;叫做返回语句. 2.1.1  作为接口的函数头 函数头描述了函数与调用它的函数的接口.

Lua_第23章 C API 纵览

第23章 C  API 纵览 Lua是一个嵌入式的语言,意味着 Lua 不仅可以是一个独立运行的程序包也可以是一个用来嵌入其他应用的程序库.你可能觉得奇怪:如果 Lua 不只是独立的程序,为什么到目前为止贯穿整本书我们都是在使用 Lua 独立程序呢? 这个问题的答案在于 Lua 解释器(可执行的 lua).Lua解释器是一个使用 Lua 标准库实现的独立的解释器,它是一 个很小的应用(总共不超过500 行的代码).解释器负责程序和使用者的接口:从使用者那里获取文件或者字符串,并传给 Lua 标准

Spring Framework Reference Documentation 3.2.8.RELEASE 第23章中文翻译

23. JMS (Java Message Service) [中文翻译 by [email protected]] 23.1 介绍 Spring提供了一个JSM集成框架,简化了JMS API的使用.这点很像Spring对JDBC的集成. JMS大致提供生产消息和消费消息两类功能.JmsTemplate类用来生产消息和同步接收消息[译注:接收消息也就是消费消息].为了异步接收消息(异步接收消息类似于JavaEE的消息驱动Bean(Message-Driven Bean,MDB),Spring提供