资源描述
南京邮电大学毕业设计(论文)题 目Android平台上数据的仪表盘可视化程序设计专 业学生姓名班级学号指导教师指导单位日 期1摘要 在如今这个科技飞速发展的时代,汽车已经是一个非常普遍的代步工具。车载虚拟仪表人机界面,是驾驶员获取汽车工况数据的主要界面,便于驾驶员实时全面地掌握汽车工作状态,有效地与汽车进行人机交互,对保障汽车安全稳定的行驶有着重要意义,目前普遍使用的是Windows CE和Linux操作系统。Windows CE操作系统功能稳定,有完善的技术支持,但价格昂贵、源代码封闭、网络可利用资源较少;Linux操作系统的最大优势在于免费和开源,是车载信息显示系统的主流操作系统,但其并不是基于移动设备开发的,不能完全满足移动设备的需求。Android 是Google开发的一款基于开源操作系统Linux的开放、开源移动平台,对于目前主流的嵌入式平台支持良好,Android系统的优越性能已在多款移动设备上得到验证。它包括操作系统用户界面和应用程序。为了加强人车之间的交流,提高人车交互界面的友好度,在Android手机平台上实现了可以查看汽车仪表盘及其他可以显示的数据等功能。汽车仪表盘反映了汽车行驶过程中的多种参数,在Android平台上我们可以观察发动机转速、车速、温度、时间及行驶里程等实时信息,对遇到的故障可以及时发现并告知用户,提高了安全使用的性能。将Android作为车载虚拟仪表软件开发平台,在Android提供的应用程序框架上来实现虚拟仪表的人机界面。关键词:Android平台;仪表盘;Eclipse2AbstractIn todays era of rapid development of technology, the car has become a very popular means of transport. Vehicle virtual instrument interface, is the main interface that driver gets condition data of automobile. It is convenient for driver to real-time to grasp the working conditions of automotive, effective human-computer interaction and the automobile has the vital significance to guarantee safe and stable running of the car. At present, Windows CE and the Linux operating system are in widespread use. Windows CE operating system has a stable function and perfect technical support,.But the price is expensive and the source code is closed. It also has fewer useful resources from network. Maximum advantage of Linux operating system is free and open source. It is the mainstream operating system of the vehicle information displayed system. But it is not based on the mobile device development and it cannot meet the demands of mobile equipment. Android is developed by Google and it is based on open source mobile platform and open source operating system Linux. For the current, mainstream embedded platform supports well. Superior performance of the Android system has been validated in a variety of mobile devices. It includes the operating system user interface and application program. In order to enhance communication between people and vehicles and improve the friendly interface of people and vehicles,we can view the automobile dashboards and other data can be displayed and other functions in the Android mobile phone platform . Car dashboard reflects a variety of parameters during the process of the car. We can observe the engine speed,vehicle speed, temperature, time, mileage and other real-time information on the Android platform. We can detect and notify the user about the fault encountered in order to improve the performance about safety and use.Keywords: Android platform; Dashboard; Eclipse3目录第一章 绪言61.1 研究背景及意义71.2 课题的主要工作7第二章 汽车仪表盘概述82.1 基本介绍92.2具体类别9指示灯和警报灯1.正时齿形带指示灯102.排气温度警报灯113.制动器警报灯114.制动防抱死警报灯115 驱动防滑控制指示灯126.安全气囊指示灯127.危险警报灯132.3硬件系统介绍132.4 硬件系统结构14一. 单总线结构折叠14二. 双总线结构折叠14三 采用通道的大型系统结构折叠142.5 CAN模块15一、 介绍15二、 功能概述15三、 功能特点15 四、 运用情况15第三章 系统开发工具概述163.1 Eclipse简介163.2开发环境的搭建163.3 Android目录结构说明173.4 Android系统架构183.5 Android应用程序概念性描述183.6 应用程序的组成部分19一、Activity19二、Intent Receiver20三、Service20四、Content Provider213.7 应用程序的生命周期211 活动的生命周期222 服务的生命周期233 广播接收器的生命周期23第四章 图吧汽车卫士244.1 简介244.2 功能244.3 相关界面254第五章 终端软件仪表盘的实现265.1 简介265.2 南邮卫士的源文件结构265.3 AndroidManifest.xml文件275.4 源代码文件和布局文件275.5其他资源文件28结束语29致 谢30参考文献31附录325第一章 绪言1.1 研究背景及意义 随着科技的发展,移动智能终端逐渐走进人们的视线,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。因此,关键应用程序的开发成为影响移动智能终端普及的重要因素,设计并开发实用、方便的应用程序具有重要的意义和良好的市场前景。Android作为当前最流行的操作平台,自然也存在着大量的应用服务需求。随着计算机软硬件技术、总线技术、电子和微机技术等的高速发展,控制系统臃肿、接线布线复杂、占用空间大的传统机械式仪表渐渐被淘汰。1仪表盘作为汽车整个系统中十分重要的部分,是提高汽车综合性能的重要方面之一。汽车仪表盘作为汽车与驾驶员进行信息交流的窗口,要求仪表盘能迅速准确地将各种信息用数字、文字和声音等形式表现出来。仪表盘上装有电子显示装置及各类仪表警示灯,用来指示汽车运行以及发动机运转的状况,以便驾驶员随时了解和掌握汽车各系统部件的工作状态,保证汽车可靠而安全地行驶。2针对传统仪表和现有仪表存在的不足,提出了一种新型的仪表盘设计方案,在手机上显示汽车上的行驶速度、电瓶电压、发动机转速,无论车主是在车内,还是在车外、办公地点都可以查看车辆的情况。在有蓝牙传递数据的基础上,我们研究这个项目,使得数据的传输突破距离的限制,更加智能,更加便捷。现如今,随着汽车电子的发展,汽车内电子产品越来越多,汽车发动机、底盘和车身等电控系统中的电控单元数量不断增加,同时它们之间的通信也越来越重要。在汽车内利用网络技术,可大大提高系统之间信息传递的可靠性,同时可大大减少汽车线束的数量,降低汽车电气系统的成本。1.2 课题的主要工作该毕业设计课题需要运用相关计算机语言编程环境,在电脑上设计出一个原始数据的录入界面和数据的仪表盘可视化程序,导入手机中,形成一个应用软件,显示当前的车辆行车速度,车辆电瓶电压,车辆发动机转速, 车辆冷却液温度,让生活更加舒适方便。本课题的目标是研究出一个在Android平台上数据的可视化仪表盘。首先应学会Android开发平台的工作原理,然后学习设计 Android平台下仪表盘的界面,主要包括界面的实现、控件的使用、界面的布局和其他模块等内容,结合汽车仪表盘上的各种数据,将准确的车辆情况以友好的方式呈现给用户,使用户可以更加赏心悦目地体验本软件的服务。课题任务的主要内容分为两个部分: (1)设计一个提供原始数据的录入界面,能向手机上的基于Android平台的车辆管理系统提供车辆行车速度、车辆电瓶电压、车辆发动机转速、车辆冷却液温度。 (2)设计数据的仪表盘可视化程序。为此需要学习的主要内容包括以下方面:对Java有熟悉的了解和大致的掌握;搭建开发环境,了解Eclipse安卓开发环境,利用其提供的ADT插件和SDK等工具;设计仪表盘界面及发动机转速、车速、温度、时间及行驶里程等实时数据的显示。此外需要注意软件要具有可扩展性,以便在今后的开发中添加其他实用功能。论文的主要内容包括:第1章 为绪言,主要介绍了课题的研究背景及意义,课题的主要研究工作等。第2章 为汽车仪表盘在硬件上的各种参数数据及硬件系统的构成,CAN模块的一系列特点功能等。第3章 是讲述Android平台开发工具Eclipse的搭建及其目录结构,另外论述了Android应用程序的组成部分和生命周期。第4章 简单介绍了现有的APP“图吧汽车卫士”的主要功能及其相关UI界面,其中包括它所显示的仪表盘界面。第5章 主要讲述了本次毕业设计课题研究“南邮卫士”工程所包含的源代码文件、布局文件及其他资源文件。第二章 汽车仪表盘概述本章主要介绍了汽车上仪表盘各项数据的显示及接口技术的功能,这是硬件方面的技术。2.1 基本介绍 不同汽车的仪表不尽相同。但是一般汽车的常规仪表有车速里程表、转速表、机油压力表、水温表、燃油表、充电表等。现代汽车仪表盘的面膜下制作了各式各样的指示灯或警报灯,例如冷却液液面警报灯、燃油量指示灯、清洗器液面指示灯、充电指示灯、远近光变光指示灯、变速器挡位指示灯、制动防抱死系统(ABS)指示灯、驱动力控制指示灯、安全气囊(SRS) 警报灯等。32.2具体类别 车速里程表车速里程表实际上由两个表组成。一个是车速表,另一个是里程表。 传统的车速表是机械式的。典型的机械式里程表连接一根软轴软轴内有一根钢丝缆。软轴另一端连接到变速器某一个齿轮上。齿轮旋转带动钢丝缆旋转钢丝缆带动里程表罩圈内一块磁铁旋转。罩圈与指针联接并通过游丝将指针置于零位。磁铁旋转速度的快慢引起磁力线大小的变化。平衡被打破指针因此被带动。这种车速里程表简单实用被广泛用于大小型汽车上。不过随着电子技术的发展。现在很多轿车仪表已经使用电子车速表,常见的一种是从变速器上的速度传感器获取信号,通过脉冲频率的变化使指针偏转或者显示数字。 里程表是一种数字式仪表,它通过计数器鼓轮的传动齿轮与车速表传动轴上的蜗杆啮合,使计数器鼓轮转动。其特点是上一级鼓轮转一整圈。下一级鼓轮转110圈。同车速表一样,目前里程表也有电子式里程表,它从速度传感器获取里程信号。电子式里程表累积的里程数字存储在非易失性存储器内,在无电状下态数据也能保存。 转速表转速表一般设置在仪表板内。与车速里程表对称地放置在一起。转速表是按照磁性原理工作的它接收点火线圈中初级电流中断时产生的脉冲信号。并将此信号转换为可显示的转速值。发动机转速越快,点火线圈产生的脉冲次数越多,表上显示的转速值就越大。 现在轿车一般都是电子式转速表,有指针式和液晶数字显示式。表内有数字集成电路它将点火线圈输送过来的电压脉冲经过计算后驱动指针移动或数字显示。另外还有一种转速表是从发电机取出脉冲信号送到转速表电路解释后显示转速值。不过因受发电机皮带打滑等因素影响。数值不太精确。 机油压力表机油压力表的传感器是一种压阻式传感器。用螺纹固连在发动机机油管路上。由机油压力推动接触片在电阻上移动,使阻值变化从而影响到通过仪表到地的电流量。驱动指针摆动。由于机油压力有一定的压力范围,为了清晰明了。目前有许多汽车的机油压力表用指示灯表示。如果发动机运转时它仍然亮着。就表示发动机润滑系统可能不正常了。 水温表水温表的传感器是一种热敏电阻式传感器。用螺纹固定在发动机冷却水道上。热敏电阻决定了流经水温表线圈绕组的电流大小。从而驱动表头指针摆动。以前汽车发动机的冷却水都是用自来水来充当现在很多汽车发动机冷却系统都用专门的冷却液。因此也称为冷却液温度表。水温表燃油表内有两个线圈。分别在 F”与E”一侧,传感器是一个由浮子高度控制的可变电阻。阻值变化决定两个线圈的磁力线强弱也就决定了指针的偏转方向。水温表和燃油表也有用指示灯表示的。水温指示灯亮表示水温偏高。燃油指示灯亮表示燃油已近低点作为辅助性提醒。指示灯和警报灯1.正时齿形带指示灯某些采用正时齿形带传动和上置式凸轮轴的进口汽车,一般都限制发动机正时齿形带的使用期限(大约 l0万km),到时候必须更换。为了使维修人员能够按时更换正时齿形带,在仪表盘上设置了正时带使用期限指示灯TBELT”,使用中需要注意以下几点:(1)当指示灯亮起,应立即观察里程表,若累计行驶里程达到或超过l0万km,必须更换正时齿形带,否则正时齿形带可能断裂,使发动机无法正常工作。(2) 更换新正时齿形带后,要拨开里程表盘上的复位开关外面的橡皮塞,用小圆棒按压一下里面的复位开关,使正时齿形带指示灯熄灭。若操作复位开关后指示灯不熄灭,可能是复位开关失灵或线路搭铁,应检修和排除故障。(3)更换新正时齿形带后还要将里程表拆下来,把里程表上所有的读数都调整到“0”位。(4)如果汽车尚未行驶l0万km指示灯已经发亮,可以按压复位开关使正时齿形带指示灯熄灭(5)如果在指示灯发亮之前更换正时齿形带,应拆下里程表,重新设定区间计数器,使里程表内的区间计数器齿轮的零位对准其传动齿轮。(6)如果只更换里程表而不更换正时齿形带,应把计数器齿轮设定在原里程表的位置上。2.排气温度警报灯 现代轿车由于在排气管上安装了三效催化转化器,所以排气温度有所提高,但是过高的排气温度容易造成三效催化转化器损坏,因此此类汽车又安装了排气温度警报装置。当排气温度警报灯点亮时,驾驶人应当立即降低车速或停车,待排气温度下降以后,该警报灯会自动熄灭(但是熔断式排气温度警报灯点亮后,如果不加以调整或维修,会一直亮着),如果排气温度警报灯不熄灭,应该查明原因,排除故障以后再继续行驶。3.制动器警报灯 制动器警报灯呈现红色,图案是圆圈内有一个 “!”符号。如果红色制动器警报灯点亮,说明制动系统存在下列情况:(1)制动器的摩擦片严重磨损;(2)制动液液面过低;(3)驻车制动器已经拉紧(驻车制动开关闭合);(4)在一般情况下,若红色制动器警报灯点亮,ABS警报灯会同时亮起,因为在常规制动系统有故障的情况下,ABS也无法发挥应有的作用。4.制动防抱死警报灯 制动防抱死警报灯呈现黄色(或琥珀色),图案是圆圈内有“ABS”字样。对于装备防抱死制动系统(ABS)的汽车,将点火开关转至“ON”位时,仪表盘上的ABS警报灯点亮 3 s 6 s,这是ABS的自检过程,属于正常现象。自检过程一结束,如果ABS正常,该警报灯就会熄灭。如果自检后ABS警报灯持续点亮,说明 ABS电控单元检测到有不利于防抱死制动系统正常运行的故障 (例如当车速超过20 kmh时,车轮转速传感器信号不正常),或EBV(电子制动力分配系统)已经关闭。在这种情况下如果继续行驶,由于制动系统的功能已经受到影响,电子制动力分配系统不再调节后轮的制动力,制动时后轮可能提前抱死或出现甩尾现象,因而有发生事故的危险,应该进行检修。 在车辆行驶中,ABS警报灯闪烁或常亮表示故障的程度不同,闪烁表示故障已经被ECU确认并且存储;常亮表示ABS的功能丧失。如果在行车中发觉汽车的制动性能不正常,但是ABS警报灯不亮,说明故障出在制动系统的机械部分和液压部件上,而不在电子控制系统。5 驱动防滑控制指示灯 驱动防滑控制系统(ASR)指示灯的图案是圆圈内有一个“”符号。例如一汽宝来18T 轿车具有驱动防滑控制功能,当汽车加速时,若ASR检测到车轮有滑转的趋势,就通过间歇关闭喷油和推迟点火提前角来降低发动机的输出转矩,以调节牵引力,防止驱动轮打滑。 ASR在任何转速范围内都能协同ABS一起工作。当点火开关接通后,ASR自动启用,即所谓“缺省选择”。驾驶人可以通过仪表盘上的ASR按钮手动取消驱动防滑控制,当仪表盘上的ASR指示灯亮起,表示 ASR已经关闭。 在下列情况下,需要车轮有一定程度的打滑,应当关闭 ASR系统。(1)车轮安装了防滑链。(2) 轿车在积雪或松软路面上行驶。(3)轿车陷在某处,需要前后移动,摆脱困境。(4)轿车在坡道上起步,但是一侧车轮的附着力极低时(例如右边轮胎在冰面上,而左边轮胎在干燥的路面上)。 如果不存在上述情况,则不要关闭ASR。在汽车行驶过程中ASR指示灯一旦亮起,说明电控单元 (ECU)已经关闭驱动防滑系统,驾驶人会感觉到转向盘操纵沉重。根据ABSASR系统的工作原理,当该系统出现故障时,轮速传感器信号的传输会中断,使汽车上其他需要轮速信号才能正常工作的控制系统 (例如转向助力系统)同时受到影响,因此只有排除了 ASR的故障,转向盘操纵沉重的现象才会随之消失。6.安全气囊指示灯 安全气囊系统(SRS)指示灯有3种显示方法,一是 “SRS”字样,二是“AIR BAG”字样(1992年8月以前生产的丰田汽车),三是“气囊保护乘员”图形。 SRS指示灯的主要功用是指示安全气囊系统是否处于正常状态,同时拥有故障自诊断功能。如果点火开关转到ON(或ACC)位置后SRS指示灯一直发亮,调取故障代码又显示正常,说明蓄电池(或SRS电控单元的备用电源)的电压过低,但是SRS电控单元设计时未将此故障编成代码存入存储器,所以没有故障代码显示,当电源电压恢复正常约10s后,SRS指示灯将自动熄灭。由于SRS平时不使用,一旦使用之后就报废,所以该系统不像汽车上的其他系统那样在使用过程中表现出故障现象来,必须依靠自诊断功能找出故障原因,因此SRS的指示灯和故障代码就成为最重要的故障信息来源和诊断依据。7.危险警报灯 危险警报灯用于汽车出现重大故障或紧急情况时向其他车辆和行人发出警示。危险警报信号的表示方式是前、后、左、右转向灯同时闪烁。 危险警报灯由独立的开关控制,一般与转向信号灯共用一个闪光器。当接通危险警报灯开关后,两侧的转向指示灯电路同时接通,前、后、左、右转向灯及仪表盘上的转向指示灯同时闪烁。由于危险警报灯电路将闪光器与蓄电池连接,因此危险警报灯在点火开关关闭(OFF)和停车时也可以使用。2.3硬件系统介绍虽然Android是作为一款手机软件平台进行开发的应用程序框架和应用程序,但其本质是一个嵌入式软件开发平台。若将Android用于车载虚拟仪表系统的开发,需要对仪表系统应用的特点进行调整。系统中主要的硬件模块有音频模块、CAN模块、液晶显示模块、串口和以太网通信模块,如下图所示。音频模块 CAN模块系统硬件平台 串口以太网通信模块 液晶显示模块 图2.3-1 硬件系统架构 以嵌入式系统的硬件为背景,对主要部件给予客观的分类和评价。 硬件是软件的基石,固然它硬件是有多么重要。嵌入式系统开发与软件开发有巨大的差别。只有充分了解硬件,软件才能更大限度地挖掘硬件的能力。 所谓硬件系统,是指构成计算机的物理设备,即由机械、光、电、磁器件构成的具有计算、控制、存储、输入和输出功能的实体部件。如CPU、存储器、软盘驱动器、硬盘驱动器、光盘驱动器、主机板、各种卡及整机中的主机、显示器、打印机、绘图仪、调制解调器等等,整机硬件也称硬设备。 随着电子系统的复杂化,系统设计已经成为一门重要的学科,传统的反复试验法已经越来越不适应时代的发展。发展迅速的软硬件协同设计技术越来越受到人们的重视。它是在系统目标要求的指导下,通过综合分析系统软硬件功能及现有资源,最大限度地挖掘系统软硬件之间的并发性,协调设计软硬件体系结构,以使系统工作在最佳工作状态。2.4 硬件系统结构1. 单总线结构折叠 即用一组系统总线将计算机系统的各部分连接起来,各部分之间可以通过总线交换信息。这种结构的优点是易于扩充新的I/O设备,并且各种I/O设备的寄存器和主存器的存储单元可以统一编址,使CPU访问I/O设备更方便灵活;其缺点是同一时刻只能允许挂在总线上的一对设置之间互相传送信息,也即分时使用总线,这就限制了信息传送的吞吐量,这种结构一般用在微型计算机和小型计算机中。42. 双总线结构折叠 为了消除信息传送的瓶颈,常设置多组总线,最常见的是在主存和CPU之间设置一组专用的高速存储总线。这种结构的优点是控制线路简单,对IO总线的传送速率要求低;其缺点是CPU的工作效率较低,因为I/O设备与主存之间的信息交换要经过CPU进行。以存储器为中心的双总线结构中,主存储器可通过存储总线与CPU交换信息,同时还可以通过系统总线与I/O设备交换信息,这种结构的优点是信息传送速率高;其缺点是需要增加硬件的投资。3 采用通道的大型系统结构折叠为了扩大系统的功能和提高系统的效率,在大、中型计算机系统中采用通道结构,在这种结构中,一台主机可以连接多个通道,一个通道可以连接一台或多台I/O控制器,一台I/O控制器又可以连接一台或者多台I/O设备,所以它具有较大的扩展余地,另外由通道来管理和控制I/O设备,减轻了CPU负担,提高了整个系统的效率。嵌入式系统的硬件设计与其应用场合和应用系统的不同而有所差别。一般情况下,用户可以根据自己的要求,选用合适的微处理器类型,根据相应的接口电路搭配不同类型外设,构成不同用途、不同不同规模的应用系统。这些系统,无论其规模多大,从硬件上看,都可以分为由核心电路构成的最小系统以及各种各样外部设备所需的外围接口电路。通常最小硬件系统指的是,由处理器以及SDRAM和FLASH构成的存储电路,再加上一些必要的辅助电路构成的核心系统。最小硬件系统不仅是整个硬件系统的核心部分,它的构成对软件系统也有重要的影响,其构成决定了处于软件系统最底层的Bootloader的设计,同时它也是嵌入式操作系统正常运行的基础。换而言之,最小硬件系统及其之上的最底层的最小软件系统构成了嵌入式系统最基本最核心的部分。2.5 CAN模块1、 介绍控制局域网CAN (controller area network)是国际上应用最广泛的现场总线之一.它作汽车环境中的微控制讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络,CAN几乎成了汽车设计领域一种必须采用的技术手段。 CAN模块是一款对整车各电子控制装置之间实现通讯数据转发的智能电控设备,从而使整车实现车载电控装置区域性网络控制系统。采用了功能强大的带有两路CAN控制器的16位微控制器。支持CAN2.0A和CAN2.0B协议。按SAE J1939标准协议开发.支持K线诊断功能。可同时适用于高速和低速CAN总线网络。具有很好的密封性,可使用于各种恶劣环境。52、 功能概述当车载各电子控制装置在不具有CAN功能(如果是不具有CAN通讯能力的电控装置,使得其与其它电控装置相互之间不能进行数据通讯,这样造成各电控装置的电控能力差,功能单一,可扩展性差),不能直接进行通讯的情况下,采用CAN模块产品就可以实现具有CAN功能的车载电控网络系统,各电控装置相互之间可以相互传递所需的电控信号,使得整车的电控系统作用更加强大。3、 功能特点(1)可以通过CAN总线网络方便地实现整车中各节点的数据信息的接收和发送;(2) 可以实时采集发动机各传感器信息,及时了解发动机的运行状态;(3) 可以对系统进行诊断;(4) 具有多样的输入和输出接口,可灵活地实现信号功能的转换;4、 运用情况其主要功能是发动ECU(电子控制单元)通过CAN模块连接到CAN总线,实现与TCU(Transmission Control Unit,即自动变速箱控制单元)、HCU(ABS执行机构)、IC(集成电路)等模块的数据转输及数据转换控制ECU、CAN模块连接上水温、油机压力、转速等传感器,将传感器数据与ECU控制时的数据发送给TCU、HCU、IC,且又把TCU、HCU的控制功能信息通过CAN模块传递给ECU。第三章 系统开发工具概述 本章内容介绍了关于Android平台的重要开发工具Eclipse以及其中的目录结构。3.1 Eclipse简介 Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。63.2开发环境的搭建 可以从网上下载eclipse、android-sdk-windows、ADT。Eclipse是做Java开发必须的工具,sdk是一个集成开发环境,而ADT插件里包括了android开发里的工作类、模拟器和一些包。由于我有一个安卓手机,所以在搭建过程中,就不需要再去配置虚拟机了。本课题eclipse采用了android 4.4的版本。搭建好的平台如下图所示。7图3.2-1 Android开发平台的搭建 下图就相当于一个手机界面,我可以将旁边一列的控件放在这个布局上,使它组合起来,完成相对应的功能,发挥其作用。图3.2-2 布局界面3.3 Android目录结构说明 (1)src 编写java代码的目录,遵循java的命名规范、分包 (2)gen 包含了android 的资源文件的标识符,不需要程序员维护,自动添加的,而且有分类。注:不可轻易删除。 (3)assets 原生资源文件:保存应用的资源文件例如音频文件、视频文件或者不经常被用户修改的文件。 (4)bin 包含编译生成apk的应用程序 (5)libs 包含第三方类库的jar包 (6)res 例如drawable-XXdpi、包含android应用中的图片资源文件,按照清晰度:高清、清晰度低、比较清晰、超高清、非常超高清 layout:布局文件,完成UI控件的堆放 menu:菜单,android的应用菜单 values:字符资源文件,通常使用在手机的国际化 (7)AndroidManifest.xml:清单文件3.4 Android系统架构 由于Android最初是基于手机软件开发平台进行设计的,而且其中大部分模块都是为手机通信所设计,为节约开发板资源,需要将Android系统中不必要的组件剪裁掉,保留必要的最小系统。因为必须对框架进行修改,将与电话、短信等相关的模块移除。仅留下必需的Android的核心模块。包括Package Manager、System Service、Input Service、Hardware Service和System Server等。通过修改System Server的加载过程可以去掉不需要的服务和模块,另外还要实现底层硬件的驱动程序,重新交叉编译Linux 2.6内核,并在驱动程序实现的基础上封装函数库,以便Android的应用程序通过JNI的方式访问底层驱动。经过定制和修改过的Android系统架构如下图所示。8界面模块CAN模块告警模块数据访问模块应用程序模块Dalvik虚拟机基础核心函数库CAN驱动显示驱动网络驱动串口驱动音频驱动Linux内核2.6图3.4-1 定制的Android系统架构3.5 Android应用程序概念性描述Android 应用程序包含了工程文件、代码和各种资源,主要由 Java 语言编写,每一个应用程序将被编译成Android 的一个 Java应用程序包(*.apk)。 由于 Android 系统本身是基于 Linux 操作系统运行的,因此 Android 应用程序也运行于 Linux 环境中,它们具有以下的特点: (1)在默认情况下,每一个应用程序运行于它们的 Linux 进程中; (2)每个进程具有自己的虚拟机(VM),所以每个应用程序运行于独立的环境中; (3)在默认情况下,每一个应用程序具有唯一的Linux用户ID。通过设置权限让应用程序只对用户和应用程序本身可见,也有一些方法可以把它们暴露给其他的应用程序。3.6 应用程序的组成部分 一般情况下,Android应用程序由以下 4 种组件构成:活动(Activity)、广播接收器(BroadcastReceiver)、服务(Service)、内容提供者(Content Provider)。 一个 Android 应用程序是一个包(Package),包中可能包含一个或者多个 Android组件(component)。 但是,并不是每一个Android应用程序都需要这四种构造块,这不是必须的,某些时候,我们只需要这四种中的几种组合成我们的应用。当我们明确了我们的应用需要哪些构造块后,我们就需要在AndroidManifest.xml中登记这些构造块的清单。这是一个XML配置文件,这个配置文件用于定义我们的应用程序的组件、组件的功能及必要条件等。这个配置文件是每个Android应用必需的。对于AndroidMainfest.xml的Schema,参考SDK包附带的文档。以下,我们对四种构造块做一些详细的说明:一、ActivityActivity是Android构造块中最基本的一种,在应用中,一个activity通常就是一个单独的屏幕。每一个activity都被实现为一个独立的类,并且继承于Activity这个基类。这个activity类将会显示由几个Views控件组成的用户接口,并对事件做出响应。大部份的应用都会包含多个的屏幕。例如,一个短消息应用程序将会有一个屏幕用于显示联系人列表,第二个屏幕用于写短消息,同时还会有用于浏览旧短消息及进行系统设置的屏幕。每一个这样的屏幕,就是一个activity。从一个屏幕导航到另一个屏幕是很简单的。在一些应用中,一个屏幕甚至会返回值给前一个屏幕。 当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保留从主屏幕到每一个应用的运行屏幕。Android使用了Intent这个特殊类,实现在屏幕与屏幕之间移动。Intent类用于描述一个应用将会做什么事。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有:MAIN(activity的门户)、VIEW、PICK、EDIT等。而动作对应的数据则以URI的形式进行表示。例如:要查看一个人的联系方式,你需要创建一个动作类型为VIEW的intent,以及一个表示这个人的URI。与之有关系的一个类叫IntentFilter。相对于intent是一个有效的做某事的请求,一个intent filter则用于描述一个activity(或者Intent Receiver)能够操作哪些intent。一个activity如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter要知道怎么去处理VIEW动作和表示一个人的URI。IntentFilter需要在AndroidManifest.xml中定义。 通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity将会调用startActivity(Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的Intent对应的activity。新的activity接收到myIntent的通知后,开始运行。当startActivity方法被调用将触发解析myIntent的动作,这个机制提供了两个关键好处:A、Activities能够重复利用从其它组件中以Intent的形式产生的一个请求;B、Activities可以在任何时候被一个具有相同IntentFilter的新的Activity取代。二、Intent Receiver当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响应,你可以使用一个Intent Receiver。虽然Intent Receiver在感兴趣的事件发生时,会使用NotificationManager通知用户,但它并不能生成一个UI。Intent Receiver在AndroidManifest.xml中注册,但也可以在代码中使用Context.registerReceiver()进行注册。当一个intent receiver被触发时,你的应用不必对请求调用intent receiver,系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent()将它们自己的intent receiver广播给其它应用程序。三、Service一个Service是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service一直执行,直到这个service运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service上(如果这个service还没有运行将启动它)。当连接到一个service之后,我们还可以service提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。四、Content Provider应用程序能够将它们的数据保存到文件中、SQL数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,Content Provider将会很有用。一个Content Provider类实现了一组标准的方法,从而能够让其它的应用保存或读取此Content Provider处理的各种数据类型。3.7 应用程序的生命周期 Android 系统中的不同组件具有不同的生命周期。Android 根据每个进程中运行的组件以及组件的状态把进程放入一个重要性分级(importance hierarchy)中。Android 进程的重要性分级,可以理解成执行的优先级。9 Android 进程的类型包括(按重要性分级排序): (1)前台(Foreground)进程 与用户当前正在做的事情密切相关,不同的应用程序组件能够通过不同的方法使它的宿主进程移到前台。 当下面任何一个条件满足时,都可以考虑将进程移到前台。 1)进程正在屏幕的最前端运行一个与用户交互的Activity(它的onResume()方法被调用); 2)进程有一个正在运行的 BroadcastReceiver(它的BroadcastReceiver.onReceive()方法正在执行); 3)进程有一个Service,并且在Service的某个方法(Service.onCreate()、Service.onStart()或者Service.onDestroy())内有正在执行的代码。 (2)可见(Visible)进程 它有一个可以被用户从屏幕上看到的 Activity,但不在前台其 onPause()方法被调用。例如:如果前台的 Activity 是一个对话框,以前的 Activity 隐藏在对话框之后,就可能出现这种进程。这样的进程很重要,一般不允许被杀死,除非为了保证前台进程的运行不得不这样做。 (3)服务(Service)进程 有一个已经用 startService() 方法启动的 Service,虽然这些进程用户无法直接看到,但它们做的事情却是用户所关心的(例如:后台 MP3 回放或后台网络数据的上传/下载)。因此,系统将一直运行这些进程,除非内存不足以维持所有的前台进程和可见进程。 (4)后台(Background)进程 拥有一个当前用户看不到的 Activity(它的 onStop()方法被调用),这些进程对用户体验没有直接的影响。如果它们正确执行了 Activity 生命周期,系统可以在任意时刻杀死进程来回收内存,并提供给前面 3 种类型的进程使用。系统中通常有很多这样的进程在运行,因此要将这些进程保存在 LRU 列表中,以确保当内存不足时用户最近看到的进程最后一个被杀死。(5)空(Empty)进程 不包含任何处于活动状态的应用程序组件。保留这种进程的唯一原因是,当下次应用程序的某个组件需要运行时,不需要重新创建进程,这样可以提高启动速度。 以上所说的“进程”是从系统运行的角度考虑的,各种不同的进程可以理解成 Android 的各种组件的不同状态机(state machine)。如果从应用程序的代码以及运行情况考虑,可以关注 Android 的各种组件相对应的生命周期。 1 活动的生命周期 活动是 Android 中最重要、最基础的组件,用户在界面上看到的一个个可以切换的屏幕界面就是 Android中的活动。(1)运行活动的情景:当一个活动被启动时,活动中的 onCreate()、onStart()和 onResume()这 3 个方法被依次调用,活动对应的界面出现在屏幕上。 (2)活动被“覆盖”的情景:Android 的活动一般都占据一个完整的屏幕,从当前活动启动另外一个活动时,另一个活动将被启动到前台(Foreground),当前活动转入后台(Background),这时活动的 onPasuse()方法将被调用,活动转入后台运行。如果活动变为不可见,还将调用 onStop()方法。在转入后台时,onStop()是否被调用取决于活动是否被完全覆盖,在新的活动有透明部分时,转入后台的活动依然“可见”,其他情况下(较多数的情况)活动均进入不可见状态(被完全覆盖)。 (3)活动被恢复的情景:当界面上最前面的活动退出后,它所覆盖的活动将被恢复,这时 onResume()方法将被调用,活动重新转入前台运行。 (4)活动完全退出的情景:当使用回退(Back)按钮退出活动时,onDestroy()方法将被调用,活动关闭。如果系统缺少内存时,也会杀死(kill)后台的活动,其中优先杀死不可见的活动,可见的活动一般不会被杀死。2 服务的生命周期 服务可以长时间运行,它的特点是没有可视化界面。使用 StartService 运行服务的情景:使用这种方法启动服务,服务的 onCreate()和 onStart()这两个方法将被调用,服务会在后台运行直到退出,退出时将调用 onDestroy()方法。 使用 bindService 运行服务的情景:使用这种方法启动服务,调用者(也就是服务的客户端)将获得和服务交互的类,通过其调用时服务的相关内容会处于活动状态。 3 广播接收器的生命周期 广播接收器有一个单一的回调方法 onReceive(),当广播消息到达接收器时,Android 将调用这个方法,并传递给包含在这个消息中的 Intent 对象。广播接收器只有在这个方法的执行过程中才处于活动状态,当 onReceive()返回后,广播接收器将不再处于活动状态。广播接收器的功能类似于一个回调函数,只是单次运行时处于活动状态。第四章 图吧汽车卫士4.1 简介图吧汽车卫士是一款智能的安全行车伴侣系统,通过即插迷你终端设备及智能app软件,轻松构建手机与汽车的连接桥梁。全方位汽车健康检查、专业故障检测,确保车辆驾驶出行的最佳状态,摒除安全隐患。同时行驶中,车速、水温、电压等异常时,系统即时传送提醒信息。让出行倍添安心!图 4-1 相关界面参数4.2 功能主要功能:(1)实时仪表:实时显示油耗,降低养车费用;(2)行车记录:记录行驶里程、里程油耗、油费、平均速度、平均油耗、耗时等信息;(3)驾驶评分:油耗评分、驾驶水平评分等多重评分,可以分享成绩给朋友圈和微博好友;还可以和全国其他车主进行油耗节能、驾驶习惯大比拼;(4)车辆预警:水温过高、疲劳驾驶、车速提醒等,多重预警机制保障驾车平安;盘等直观显示方式。4.3 相关界面第五章 终端软件仪表盘的实现5.1 简介南邮卫士是一个简单的Android应用程序,其工程文件名称为“南邮卫士”。南邮卫士的图标,我采用了一个发动机转速的仪表盘,这样更加鲜明,简洁明了。图标和运行情况如下图所示。图5-1 APP南邮卫士的图标图5-2 运行的界面这个程序是一个简单的活动,用于启动一个界面,点击“南邮卫士”的APP图标后,界面上直接会显示一个大表盘和一个小表盘。5.2 南邮卫士的源文件结构 “南邮卫士”工程的源文件的结构按照目录树的方式如下所示: 南邮卫士/ |-src (Java源代码文件) | |-com.rrr.drawdialdemo| | -DrawDialDemoActivity.java| |-com.rrr.view| | -DialView.java|- AndroidManifest.xml (工程描述文件) |- res (资源文件) | |- layout | | - main.xml (布局文件) | - values | - strings.xml (字串资源文件) | -proguard.cfg| -project.properties5.3 AndroidManifest.xml文件 AndroidManifest.xml 文件是这个 Android 应用程序的工程描述文件,包含了宏观上的内容,如下所示: activity
展开阅读全文