基于Android计算器功能的实现

更新时间:2024-05-12 14:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于Android计算器功能的实现

摘要

随着移动通信技术和网络技术的迅速发展,手机系统发生了巨大的变化,从进行简单通话功能的非智能手机到现在集上网、聊天、收发邮件、视屏电话会议等各种服务于娱乐为一身的智能手机系统。由Google公司牵头众多实力雄厚的软硬件厂商加盟成立了OMS联盟,并推出的Android平台手机系统。作为时代的新生儿,Android手机操作平台有着得天独厚的优势广阔的发展前景。本文正是基于Android平台开发的计算器。论文主要阐述以面向对象的程序开发语言eclipse为开发工具, 设计并实现基于Android的计算器。论文首先介绍了Android开发平台和环境以及Android 工程的重要部分,其次对计算器系统和程序进行了分析和设计,再次对计算器进行了系统的实现,并对系统进行了严格的验证,最后本文对所做工作进行了总结。

关键词:手机,Android,用户界面,计算器

I

THE CALCULATOR FUNCTION REALIZATION BASED

ON ANDROID

ABSTRACT

With the development of mobile communication technology and network technology, great changes have taken place on the mobile phone system. The original mobile phone only has the functions of communication and Smartphone has the functions of internet, chat, video conferencing and other services and entertainment. Android mobile phone platform which was developed by Google Company and many equipment manufacturers of hardware and software vendors, as the era of neonatal has a unique advantage and prospects for development. This article is based on the Android platform calculator. The thesis describes object-oriented programming language eclipse development tools, design and implement a calculator based on the Android. The paper first introduces the Android development platform and environment as well as an important part of the Android project, followed by the calculator systems and procedures analysis and design, the realization of the system once again the calculator, and strict verification, Finally, a summary of the work done.

Key words: mobile phone, Android, UI, calculator

II

目 录

1 引言 ...................................................................... 1

1.1 课题背景及意义 ....................................................... 1

1.1.1 课题背景 ....................................................... 1 1.1.2 课题意义 ....................................................... 1 1.2 智能手机平台系统 ..................................................... 2 1.3 课题来源 ............................................................. 3 2 基于Android平台计算器相关技术概述 ......................................... 4

2.1 Android手机平台 ..................................................... 5

2.1.1 Android起源及优势 ............................................ 5 2.1.2 Android体系结构 .............................................. 5 2.1.3 Android平台功能特征 .......................................... 7 2.2 Android SDK介绍 ..................................................... 9 2.3 XML技术 ............................................................ 10 2.4 JNI技术 ............................................................ 11 3 基于Android平台计算器设计 ................................................ 12

3.1 系统的总体设计 ...................................................... 12 3.2 程序流程和系统功能设计 .............................................. 13

3.2.1 程序流程设计 .................................................. 13 3.2.2 系统功能设计 .................................................. 14 3.3基于Android平台系统具体设计 ........................................ 15

3.3.1 总体模块详细设计 .............................................. 15 3.3.2 输入模块详细设计 .............................................. 16 3.3.3 显示模块详细设计 .............................................. 16 3.3.4 计算模块详细设计 .............................................. 17

4 计算器系统实现 ............................................................ 18

4.1 Android应用程序构成 ................................................ 18 4.2 Android应用系统文件结构 ............................................ 19 4.3 构建Android应用程序用户界面 ........................................ 21

4.3.1 Android应用程序界面组件 ...................................... 21 4.3.2 Android应用系统界面组件 ...................................... 22 4.3.3 Android用户界面的实现 ........................................ 24 4.4 计算模块的实现 ...................................................... 28 4.5 计算器演示 .......................................................... 30 5 结论..................................................................... 32 谢辞 ....................................................................... 33 参考文献.................................................................... 34 附录1: .................................................................... 36 附录2: .................................................................... 38

III

1 引言

1.1 课题背景及意义

1.1.1 课题背景

随着社会的发展,经济水平的提高,手机越来越普及。截止到2010年,中国手机用户数量将从2007年的5.40亿增长到7.38亿。同时伴随着移动互联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。

智能手机具有独立的操作系统,像个人电脑一样支持用户自行安装软件、游戏等第三方服务商提供的程序,并通过此类程序不断对手机的功能进行扩充,同时可通过移动通讯网络来实现无线网络接入。

智能手机同传统手机外观和操作方式类似,不仅包含触摸屏也包含非触摸屏、数字键盘手机和全尺寸键盘操作的手机。但是传统手机都使用的是生产厂商自行开发的封闭式操作系统,所能实现的功能非常有限,不具备智能手机的扩展性。

从广义上讲,智能手机除了具备手机的通话功能外,还具备个人信息管理以及基于无线数据通信的浏览器、GPS(Global Positioning System)和电子邮件功能。智能手机为用户提供了足够的屏幕尺寸和带宽,既方便随身携带,又为软件运行和内容服务提供个广阔的舞台,很多增值业务可以就此展开,如:股票、新闻、天气、交通、商品、应用程序下载、音乐图片下载等等。结合3G通信网络的支持,智能手机的发展,势必将成为一个功能强大,集通话、短信、网络接入、影视娱乐为一体的综合性个人手持终端设备。

[3]

[2]

[1]

1.1.2 课题意义

随着通信技术的发展,3G从制定出到现在越来越被人们关注。“3 G”(英语3rd-generation)或“三代”是第三代移动通信技术的简称,是指支持高速数据传输的蜂窝

1

移动通信技术。目前3G存在四种标准:CDMA2000、WCDMATD-SCDMA、WiMAX。其中TD-SCDMA(全称Time Division-Synchronous CDMA)是由中国大陆独自制定的3G标准。

为了推动我国的智能手机的发展,实现多功能的智能手机,方便人们丰富多彩而又快节奏的生活。本文正是基于Android平台开发的计算机器。论文主要阐述以面向对象的程序开发语言eclipse为开发工具, 基于智能手机Android之上设计一个计算器。本文的目标就是设计并实现基于Android的计算器,论文首先介绍了Android开发平台和环境以及Android 工程的重要部分,然后着重针对计算器的系统设计和系统设计的具体实现,最后实现计算器的各种功能并得到了很多好的验证。

[4]

1.2 智能手机平台系统

智能手机(Smartphone),是指“像个人电脑一样,具有独立的操作系统,可以由用户自行安装软件、游戏等第三方服务商提供的程序,通过此类程序来不断对手机的功能进行扩充,并可以通过移动通讯网络来实现无线网络接入的这样一类手机的总称”。目前全球主要的只能手机操作系统依次是iPhone OS、Symbian、BlackBerry OS和Android,其中Android最年轻,市场份额正迅速增加。下面简单介绍Android以外的几款常用的智能手机系统。

IPhone OS是苹果公司专门为iPhone开发的智能手机系统。iPhone手机具有硬件与软件一一绑定的特性,Apple公司采用与运营商分成的策略。iPhone虽然开放了SDK,可是却不能在PC上使用,这对于中国的应用开发市场是个不晓得阻碍。但它将创新的移动电话、可触摸宽屏iPod以及具有桌面级电子邮件、网页浏览、搜索和地图功能的突破性因特网通信设备这三种产品完美的融合为一体的特性,也吸引了无数的用户。

Symbian(中文名:塞班)是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,虽然在智能型手机市场取得了无比的成功,并长期居于首位,但是Symbian S60、Symbian3,UIQ等(尤其是S60)系统近两年亦遭遇到显著的发展瓶颈。最近12个月欧洲手机公司诺基亚(Nokia)在智能手机市场市占率的滑落是不争的事实。需要注意的是,并不是所有的Symbian系统都是智能系统,比如S40系统,就不属于智能手机系统。

BlackBerry OS是RIM专用的智能手机操作系统。BlackBerry,在美国市场占有率相对较高,BlackBerry的比较具有个性的设计就是宽大的屏幕和便于输入的QWERTY全键盘,所以BlackBerry在移动电子邮件方面非常方便,由于我国手机用户发送短信对于发送邮件,

2

[7]

[6]

[5]

所以BlackBerry系统的邮件优势在中国不存在,目前BlackBerry OS在智能手机操作系统的市场份额占据第三位i,BlackBerry手机市场主要在美国。

windows mobile是微软由于Pocket PC和Smartphone的软件平台。windows mobile系统将大家熟悉的Windows桌面延伸到了移动设备中。windows mobile是Microsoft为手持设备推出的“Windows移动版”。受Android的冲击,目前Windows Mobile在智能手机操作系统的市场下降到4%左右。

Linux凭借其开放源代码、免费的优势,经过来自全球程序员的努力,再加上google、IBM等计算机巨头的支持。Linux在手机操作系统市场中成为了衣服新生的力量,尤其是在许多知名厂商如摩托罗拉宣布支持Linux手机操作系统之后,Linux的市场份额有增加的趋势。目前基于Linux的智能手机占有7.3%的市场份额。

Palm OS由Palm公司研发,是一种32位的嵌入式操作系统,它的操作界面采用触控式,几乎所有的控制选项都排列在屏幕上,使用触控笔进行所有操作。目前基于Palm OS的智能手机占有2.3%的市场份额

[12]

[9]

[8]

1.3 课题来源

计算器作为现在人们日常生活中常用的一种工具已经可以说是人们日常生活中必不可少的工具了。但是计算器的发展经历了漫长的过程,凝聚无数先人的智慧,甚至连计算机的发展都可以说是源于计算器的发展。计算器和计算机一样都能够实现数据的输入、处理、存储和输出这些基本的功能,但计算器区别于计算机的地方就是,它不能自动的进行计算,必须要求由人来操作完成计算;而计算机通过提前编写好的程序就能够自动的按照程序进行处理。所以计算器和计算机的一个显著的区别就在于是否需要人为地操作来完成运行。这二者还有另一个本质性的区别。计算器的处理数据的方法是生产时就已经固化在系统中了,所以计算器只能按照系统中规定的处理方法来处理用户要求的计算任务;而计算机由于可以自行安装操作系统和各种的相关软件和硬件,理论上计算机拥有的可扩展性是无穷的。所以简单的说,计算器和计算机的本质性区别就在于该系统是否存在可扩展性。

在我所了解到的知识中,最早的计算工具可以追溯到中国古代一种叫做筹策(又叫算筹)的东西上。这种计算工具在计算的时候摆成纵式和横式两种数字,按照纵式相间的原则表示任何自然数,从而进行加、减、乘、除、开方以及其它的代数计算。负数出现后,算筹分为

3

红和两种,红筹表示正数,黑筹表示负数。虽然我对于这种计算的原理不是很了解,但是不得不说,这种运算工具和运算方法确实是当时世界上独一无二的。

直到今天仍有一些人在使用的珠算或者叫算盘,是中国古代计算工具中的另一项伟大发明,而从明朝开始使用的算盘就已经与现代的算盘几乎完全相同了。

以上介绍完了中国关于计算工具的发展,下面我们来看看西方社会中计算工具的发展情况。我通过查询资料得知,17世纪初这个时期,西方国家的计算工具开始有了一个较大的发展,英国数学家纳皮尔发明的\纳皮尔算筹\,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺的功能不仅仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具的产生不单单是带动了计算器的发展,更是为现代计算器的发展奠定了一个坚实的基础。虽然当时的技术水平有限,这些工具使用的不是机械或者电子作为载体,但是这些计算工具却为了后世的计算器提供了一个良好的思路。

1642年,伟大的法国科学家帕斯卡在年仅19岁的时候就利用了算盘的计算原理发明了世界上第一部机械式的计算器,在这个计算器中有一些互相咬合的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,靠这样来实现十进制的算法,人们可以转动齿轮,把想要输入的数据输入进去,计算结果就会出现在另一个窗口中,但是这个计算器只能做一些加减计算。1694年,莱布尼兹在德国将其改进,使这种计算器成为可以进行加减乘除计算的计算器。此后,一直要到20世纪50年代末才有电子计算器的出现。

2 基于Android平台计算器相关技术概述

本章介绍了基于Android平台计算器相关技术。首先介绍了各种智能手机平台系统,并进行分析。重点介绍了Android平台系统,对Android体系结构及平台功能进行了介绍。同时还对本文界面开发实现要用的XML技术进行了简单的介绍,具体如下。

4

2.1 Android手机平台

2.1.1 Android起源及优势

Android平台自发布以来就一直吸引着广大开发者的目光,Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件

[14]

。Android平台具有以下优点:

(1)平台的开放性允许任何厂商加入,使其拥有更多的开发者,新颖的应用功能及创意可以不断地出现。

(2)脱离了运营商的束缚,让手机更加贴近互联网。

(3)应用程序都是基于java开发的,java具有一次编写、到处运行的跨平台性。能够实现在所有的Android设备中运行,真正做到了硬件的无关性,降低了开发者的负担。

(4)提供了标准的API和SDK开发包,手机厂商可以根据需要自行开发或者使用已有的程序,从而打造出富有特色的Android平台。

2.1.2 Android体系结构

Android平台架构

[15]

从上至下包含五部分:应用程序(Application)、应用框架

(Application Framework)、开发库(Libraries),运行时环境(Android Runtime)以及Linux内核,如图2-1所示.

(1).应用程序

Android同一系列核心应用程序包一起发布,该程序包包括email客户端、SMS短消息程序、日历、联系人管理程序等。所有的应用程序都是用Java语言编写的。

(2).应用框架

应用框架式进行Android开发的基础。应用程序框架层包含了视图系统、内容提供器、窗口管理器、活动管理器、通知管理器、资源管理器、电话管理器和包管管理器9大部分。

5

图 2-1 Android架构图

在Android中,任何一个应用程序都可以发布自身的功能块,而其他应用程序则可以使用已发布的功能块。基于这样的重用机制,用户就可以方便地替换平台自身的各种应用程序组件,这在Symbian和Windows Mobile平台中都是无法实现的。虽然Android本身已在框架中提供了许多软件组件,不过这并不表示所有的应用程序一定要调用Android本身已在框架中提供了许多软件组件,不过这并不表示所有的应用程序一定调用Android所提供的组件,开发人员在开发Android平台上的应用程序时,也可以开发新的软件组件,并将该软件组件放入Android的应用程序框架中。

(3)开发库(Libraries)

Android包含一套C/C++开发库,主要包括:libc、Media Framework、WebKit、SGL、OpenGL ES、FreeType、SQlite等。这些库被应用于Android系统的各种组件中,开发人员可以通过Android应用框架调用它们。

(4)运行环境(Android Runtime)

Android虽然采用Java程序语言来编写应用程序,但并不使用J2ME执行Java程序,而是用Android本身自带的Android运行时环境。Android运行时包括核心库和Dalvik虚拟机两部分,如图2-2所示,这两部分具体功能如下:

核心库包含两部分内容:一部分为绝大多数Java程序语言所需要调用的功能函数,另外一部分为Android的核心库,如android.net、android.os、android.media等。与标准

6

Java语言不一样的是,每个Android应用程序都有一个自用的进程,即Android不是用一个Dalvik虚拟机来同时执行多个Android应用程序,而是每个Android应用程序都有一个自身的Dalvik虚拟机来执行。

图 2-2 Android 运行时

Dalvik是一种基于寄存器的Java虚拟机。Dalvik虚拟机是专门为移动设备而设计的,它在开发时就考虑到了用最少的内存资源来执行,以及支持前面提到的同时执行多个虚拟机的特性。Dalvik虚拟机有许多地方参考了Java虚拟机的设计,不过Dalvik虚拟机所执行的中间码并非是Java虚拟机所执行的Java字节码,但也不直接执行Java的类文件,而是依靠转换工具dx将Java字节码转换为dex格式。

(5)Linux内核(Linux Kernel)

Android的内核系统服务依赖于Linux2.6内核(如图2-3所示),如内存管理、进程管理、安全性、网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的抽象层,这样应用程序开发人员就无需关心硬件实现细节。

图 2-3 linux 内核

整体架构上,Android相比其他平台显示出了自身的特点,例如集成了WebKit浏览器、Dalvik虚拟机等模块、提供了开源的代码、可重用和可替换组件的程序应用框架、SQLite结构化的数据存储的数据库等特点。

2.1.3 Android平台功能特征

Android平台具有很多独特的功能特征,具体如下。

7

应用程序架构:在应用程序架构内已经具备了多种不同的基础组件,在开发应用程序时,可以直接调用这些组件,极大地节省了程序开发人员的时间与精力。

Dalvik虚拟机器:在Android平台上使用的java虚拟机,不是Sun公司的标准java虚拟机,而是Google自主开发的代码为Dalvik的虚拟机,它不但保证了JavaAPI的兼容性,同时针对移动手机进行了大幅优化,占用资源更少,运行效率更高。

集成的浏览器:集成的浏览器是Android内建的浏览器,是以WebKit的浏览殷勤为基础开发的。WebKit是一个开源浏览器网页排版引擎,目前使用了WebKit引擎的浏览器主要有:Safari,Midori,Epiphany等。配合Android手机的功能,可以再浏览网页时,达到更好的效果,例如:局部缩放网页上的咨讯、触控式的操作等效果。

优化的绘图能力:在程序里可以用到的绘图功能分为2D和3D两个方面。在2D方面,Android提供了一套特有的类库(SQL);而在3D方面则是使用OpenGLES1.0(OpenGL for Embedded Systems)规范的类库。它们是一种非常快的图形引擎,并且支持硬件加速。

SQlite数据库:SQlite提供结构化的数据存取。SQlite

[16]

是一款轻型的数据库,它的

书记目标是嵌入式的,目前已经有很多嵌入式产品使用了它,它占用的资源非常低。它能够支持windows、linux、unix等主流的操作系统,同时能够和很多程序语言相结合,比如PHP,Java等,还有ODBC接口,与Mysql,PostgreSQL相比,它的处理速度更快,无需安装和管理配置。它是一个储存在单一磁盘文件中的完整数据库,体积很小只有250KB,但所支持数据库大至ZTB。它虽然很小巧,但是支持的SQL语句毫不逊色于其他开源数据库。同时它还支持事务功能和并发处理等。SQlite也是一套开发性的关联式资料库,其特点在于轻量性方面的设计结构,更适合在手机上使用。

多媒体的支持能力:主要用于播放媒体文件。包括对音频(如播放MP3或其他音乐文件等)和视频(如播放从网上下载的视频)的支持,并支持“播放URI地址”模式——在网络上直接播放的流媒体。另外支持各种通用的静态图像格式,例如:JPG、PNG、GIF等格式。

GMS技术:Global System for Mobile Communications,即全球移动通讯系统,俗称“全球通”,是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球

[17]

GSM技术是属于手机硬件方面的展现,也是在开发Android应用程序时可以突出的特点之一。

蓝牙、EDGE、3G及Wi.Fi:蓝牙技术是一种新型、开放、低成本、短距离的无线连接技术,可取代短距离的电缆,实现话音和数据的无线传输。EDGE(Enhanced Data Rate for GSM Evolution),即增强型数据速率GSM演进技术。EDGE是一种从GSM到3G的过渡技术,它

8

主要是在GSM系统中采用了一种新的调制方法,即最先进的多时隙操作和8PSK调制技术

[18]

由于8PSK可将现有GSM网络采用的8GMSK可将现有GSM网络采用的GMSK调制技术的信号空间从2扩展到8,从而使每个符号所包含的信息是原来的4倍。Wi.Fi(WireleddFidelity),即无线保真技术,和蓝牙技术一样,都属于在办公室和家庭中使用的短距离无线技术。该技术使用的是2.4GHz附近的频段,该频段目前尚属没用许可的而无线频段。其目前可使用的标准有两个,分别是IEEE802.11a和IEEE802.11b。这些通讯能力是属于手机硬件方面的展现,也是在开发android应用程序时可以突出的特点之一。

GPS:Global Positioning System,即全球定位系统,它是一个由覆盖全球的24颗卫星组成的卫星系统

[19]

。这个系统可以保证在任意的时刻和任何地点都可以同时观测到4颗卫

星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。这项技术可以用来引导飞机、船舶、车辆以及个人。这个同样也是属于手机硬件方面的展现,也是在开发Android应用程序时可以突出的特点之一。

丰富的开发环境:在Android SDK提供相当完善的程序开发环境,其开发环境包括设备模拟器、调试工具、内存和性能检测等方面的评估功能,另外也可提供用于Eclipse IDE的开发插件界面。

2.2 Android SDK介绍

Android SDK是Android手机操作系统运行的平台支撑,它由开发文档、实例、编程API、开发工具集等组成[20]。Dosc包含了的Android开发文档,Samples包含了Notepad、APIDemos、Snake等示例程序,Tools包括全部开发、编译和调试工具。

Emulator.exe:能启动Android模拟器。Android模拟器用来在虚拟的Android环境下,运行应用程序。

Adb.exe(Android debugging bridge):是Android的一个调试工具,ddms是一个在adb基础上的一个图形化工具。Adb的工作方式比较特殊,采用监听TCP5554等端口的方式让IDE和Qemu通讯,默认情况下adb会监听daemon相关的网络端口,所以当运行Eclipse时adb进程就会自动运行。

Android是一个操作系统平台,启动一个模拟器就启动了一个操作系统。可以使用Android adb连接到这个操作系统,并运行一些系统命令,就像平时大家用终端访问一个远程linux、unix服务器,可以使用adb shell。如下进行shell后进行ls命令,在该shell

9

下可运行linux下一些常用的命令。注意:adb shell默认只启动一个模拟器(emulator),如果需要启动多个模拟器,则需要添加相应的参数。如刚才使用的adb devices命令返回了两个模拟器,如果要连续其中一个则加参数-s;使用加:adb –是emulator-5544 shell。

2.3 XML技术

XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。XML是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记易于建立,虽然XML占用的空间比二进制数据所占用的空间多,但XML极其简单易于掌握和使用。

XML作为一种广泛且被各大厂商接收的语言,具有自己的优点,其优点主要体现在以下几方面。

(1)开放性

XML成功的主要因素之一是它的基于规范和标准的开放性。XML技术根据标准规范,允许在任何平台上取得和处理数据。更重要的是XML允许通过HTTP和其他传输协议交换XML数据。

(2)可扩展性

可扩展性是指,使用XML可以按照自己的需要制定语言。XML继承了SGML的许多关键特性,首先是良好而可扩展性。XML允许使用者创建和使用自己的标记而不是HTML的有限词汇表,用户可以根据应用需要定义自己的标记语言,也可以建立一套特定行业标记语言,作为信息共享和数据交换的基础。使用XML作为表单的描述格式,可以满足用户对表单定制的需求。

(3)XML文档的内容和结构完全分离

XML的形式和内容是分离的,这样可以让数据的收集者专注于数据处理,相同的数据无需改动即可在不同的XSL(XML Style language)页面呈现不同的风格。同时,内容和形式的分离使XML文档在不同应用系统之间的转换变得非常简单,用户只需要将两个不同XML文档的DTD(Document Type Definition)或XML Schema进行映射。

10

2.4 JNI技术

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许java代码和其他语言编写的代码进行交互。JNI的初衷是为了本地已编译语言,尤其是为C和C++而设计的,但是它并不妨碍使用其他语言,只要符合约定且被支持就可以了。JNI设计的目的是在java应用程序中调用其它语言编写的功能模块。其结构如图2-4所示。

图 2-4 JNI 调用关系图

标准的java类库可能完成不了所需要的功能特性,或许已经有了用其他语言写成的库或者程序,而希望在本java程序中使用它,则可通过JNI调用。如果需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在java程序中调用这些功能。实现JNI的步骤如图2-5所示。

(1)编写带有native声明的方法的java类,native所声明的方法既是java调用但其实现过程是由别的语言完成的。

(2)使用javac命令编译所编写的java类,生成可以再JVM运行的字节码。使用javah?jni java类名生成扩展名为.h的头文件。在自动生成的头文件中将声明有待实现的C函数。

(3)使用C/C++实现.h文件中所声明的方法。

(4)将C/C++程序文件编译成动态链接库文件,然后将动态库加载到系统中,然后应用程序通过native接口调用即可。

11

图2-5 JNI 开发流程

3 基于Android平台计算器设计

设计实现一个成功的应用程序,不但要有使用的功能配置,也要有有好的用户界面,下面就是我对基于Android计算器的设计简要介绍。

3.1 系统的总体设计

根据任务书,符合使用用户的实际要求,系统应实现以下功能:计算器界面友好,方便使用,显示至少6位结果,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有退格功能,能够删除最后一个输入,具有清除功能,即C,具有结果存储功能,能够显示存储器状态,支持触屏手机。

整个程序基于android技术开发,出总体模块外主要分为输入模块、显示模块以及计算模块(包括一些其他功能)这三大部分。在整个系统中总体模块控制系统的生命周期,输入

12

模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算以及一些其他的功能。下面较为详细的做了说明。

具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。 输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机按键动作以及用指针事件处理方法处理触屏的单击动作(以松开按键为准)。同时提供了较为直观的键盘图形用户界面。

显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时还负责显示一些其他的信息。

计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除、等各种计算功能,记忆数据的相关功能,退格以及清零的功能。

3.2 程序流程和系统功能设计

3.2.1 程序流程设计

知道了系统的功能以后,我们通过main.xml来建立显示界面,完成后系统开始监听用户的按键输入,每次输入系统都会判断一次用户输入的类型,是数字还是运算符号或者是清除,判断完后分成不同类型如数字,符号,基本运算等等进行进一步的处理,根据用户的要求继续进行下一步的操作,最后计算出最终结果并显示在显示区。系统流程图如图3-2所示:

13

图3-1 程序流程图

3.2.2 系统功能设计

整个系统的功能比较多,比较复杂,如上所说,可以分为十多个功能模块,但是逻辑上理解其实不算困难,系统包括普通计算功能,包括加减乘除,退格以及清零功能。下面就让我们用图3-2来表示:

图3-2 系统的功能图

14

以上就是系统的流程图,不过只是一个简单是示意流程图,不是整个程序的完整流程图,整个系统的流程图由于模块众多,整个列举不易于理解,故此就只采用简单流程图作为示例说明,反而更加的简单明了。

3.3基于Android平台系统具体设计

系统除了总体模块以外主要由三大模块来组成,即输入模块,显示模块和计算模块。用系统框图来表示即如图3-3。

图3-3 系统框图

系统这三大模块都各自包含什么内容在下文的系统详细设计中会有进一步的说明,此处就暂且略过。

下面就来详细的说明一下系统的各个模块都是如何设计的。

3.3.1 总体模块详细设计

总体模块需要完成的任务主要就是系统的程序启动类,需要负责整个系统的生命周期。同时在还要在模块中完成菜单栏的所有功能,即退出程序,记忆数据,显示数据,清除记忆数据这四个功能。

总体模块的功能图如图3-4:

图3-4 总体模块功能图

15

3.3.2 输入模块详细设计

系统如果想完成计算器中的各种功能,首先用户要能进行数据输入,由于是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所以在设计的时候就要充分的考虑要这一点。正是由于考虑到这个特殊的地方,所以在进行模块设计中,选择编写输入模块类的时候会特意选取使用了可以支持触屏输入的特殊增强型图形用户界面类。

输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,本模块还需要为系统提供了一个较为直观的键盘图形用户界面。

输入模块的功能图如图3-5:

图3-5 输入模块功能图

3.3.3 显示模块详细设计

作为手机计算器系统,显示部分也是必不可少的一部分。没有显示部分就没有办法显示用户输入的数字是否正确,甚至不能显示计算出的结果,由此可见显示模块即包括输入的部分也包括输出的部分。

显示模块主要要完成的任务是描述计算器的显示区,该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。同时本模块还将提供调用和设置显示的具体方法。

显示模块的功能图如图3-6:

16

图3-6 显示模块功能图

3.3.4 计算模块详细设计

系统要完成整个的计算器的计算功能,那么计算模块就是整个系统的重点模块。没有计算模块系统就不能顺利的完成计算,就无法达到用户的要求。所以计算模块的设计也是本次系统设计中的重点。

系统想要能在屏幕上显示出计算器的样子要有整体的布局,在本模块中要完成布局的具体设计,使用户能够看到整个计算器的画面。同时系统想完成计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。这部分主要是对输入进行的逻辑判断,基本会通过if else来实现逻辑判断。计算模块的功能图如图3-7:

图3-7 计算模块功能图

17

4 计算器系统实现

4.1 Android应用程序构成

Android应用程序一般是由Activity、Serviece、Content Provider、Intent、Intent Receiver、Notification六个组件构成。但并非每一个Android应用程序都包含这六个组件。

(1)Activity(活动):应用程序的表示层。Activity是Android的基本组件。每一个activity代表一个单独的屏幕。每一个activity都是继承于Activity的独立类。这个activity类将会显示出几个Views控件组成的用户接口,并对事件作出响应。Android使用了Intent,实现在屏幕与屏幕之间跳转。Activity跳转时只需要调用startActivity(Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的Intent对应的activity。新的activity接收到myIntent的通知后,开始启动运行。当startActivity方法被调用将触发解析myIntent的动作,这个机制提供了两个关键的好处:能够重复利用从其他组件中以Intent的形式产生的一个请求和可以在任何时候被一个具有相同IntentFilter的新的startActivity取代。

(2)Service(服务):Android应用程序的后台运行组件。Service没有用户界面的程序。服务组件在后台运行,它们可以更新数据源和可见的Activity,并触发Notification。它们被用来执行一些需要在后台持续的常规处理。例如媒体播放器这个activity会使用Context. startService()方法,连接到一个service上(如果这个service还没有运行将启动它)。当连接到一个service之后,我们还可以通过service提供的接口与它进行通讯。

(3)Content Provider(内容提供器):用来管理和分享应用程序数据库。Content Provider是在应用程序之间共享数据的首选方法。通过配置Content Provider允许其他应

18

用程序访问存储的数据,也可以使用其他应用程序提供的Content Provider来访问它们存储的数据。Android平台也提供了系统自带的Content Provider,如联系人信息等。

(4)Intent(意向):Activity之间的粘合剂。使用Intent,可以在系统范围内向目标活动或者服务广播消息,说明希望执行某个动作的意图。之后系统就会确定那些最适合执行动作的目标。

(5)Intent Receiver(意向接收器):通过Intent Receiver实现应用能够对一个外部的事件作出响应,Intent Receiver在AndroidManifest.xml中注册,但也可以在代码中使用Context.registerReceiver()进行注册。当一个intent receive被触发时,应用不必对请求调用intent receive,系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent()将它们自己的intent receive广播给其他应用程序。

(6)Notification(通知):一种用户通知框架。通过允许向用户发送信号,而不会过分吸引他们的注意力或者打断他们当前的活动。它们是服务或者广播接收器吸引用户注意的首选方法。例如,当设备接收到一个文本消息或者来电的时候,它可以通过闪灯、发出声音、显示图标或则会显示对话框信息的方式提示用户。

4.2 Android应用系统文件结构

本文是基于Android平台的开发,采用的开发语言为JAVA。Eclipse是开源的开发工具,具有强大的功能及良好的用户界面,深受广大开发者喜爱本文采用了Eclipse+Android SDK2.1开发环境。在Eclipse建立计算器的Android项目工程,计算器的工程文件名为jisuanqi2。然后加你存放源文件、资源文件、页面文件等各个文件夹。整个工程项目的目录结构如图4-2所示。

19

图4-1项目的目录结构图

其中src和gen文件夹下是整个项目的源文件,所有的java代码都在这两个文件夹下。src文件夹存放的是本文中开发的所有java文件。这java文件是整个项目的代码。gen下面的R.java文件为Eclipse自动生成的系统文件,此文件中包含了本文开发过程中所吸引的资源的标示。

res是存放整个系统中所用到的所有资源,此文件夹包含五个文件夹。分别为anim、drawble、layout、values、values-zh-rCN。其中anim文件夹下存放的是界面动画效果。Drawble文件夹存放的是本文开发过程中所用到的所有图片。Drawble包括drawable-hdpi,drawable-ldpi,drawable-mdpi三个文件夹,这是Adroid2.1版本的改进,是为了适应Android手机系统不同的屏幕大小而设计的。用高分辨率的屏幕时,页面所需要的图片在drawable-hdpi中,用地分辨率的屏幕时,则采用drawable-ldpi文件夹下的资源图片;而

20

普通分辨率时采用drawable-mdpi文件夹下的图片资源。因此这种设计具有很好的版本适应性及兼容性,大大提高了用户体验。

AndroidManifest.xml是每个Android程序中所必需的,它位于Android工程的根目录,描述了package中的全局数据,包括package中的组件,各自的实现类,各种能被处理的类和启动位置等。Manifest文件的主要功能是声明应用程序的组件。例如,一个activitiy必须要有一个标志对应,无论它是供应外部使用还是只用于自己的package中。如果一个Activity没有对应的标记,他将不能被运行。

上述两个语句就是Activity声明。Name属性指定了实现这Activity的Activity子类。Label属性值指向此Activity要展示给用户的标签资源。注意:几乎所有的AndroidManifest.xml文件都会在第一个元素中包含一个命名空间的声明

xmlns:android=http://schemas.android.com/apk/res/android该声明使标准

Android属性在文件中可用。这些属性为文件中的xml元素提供了大部分数据。

Layout文件夹下面存放了本文所用到的所有用户界面的XML布局文件。这些用户界面资源文件定义后系统会在gen文件夹下的R.java文件中生成对应的资源引用符号。当系统调用生成用户界面时,只需要引用对应的引用符号即可。

Values文件夹下存放的是本系统所用到的文字及数字资源,这些资源以键值得形式存放。如The file has been saved。这些文字或数值资源对放在,为开头结尾的标签对xml文件中。Values-zh-rCN文件夹存放的是资源的英文形式,当程序所运行的系统平台为英文系统时,调用values文件夹下资源;当程序所运行的平台为中文时,调用Values-zh-rCN文件夹下资源,显示中文方式。

4.3 构建Android应用程序用户界面

4.3.1 Android应用程序界面组件

Android应用程序的基础功能单元是Activity。它是android.app.Activity类中的一个对象。一个Activity可以实现很多功能,但是它自己并不会显示到屏幕上。Android应用程序界面需要使用view和viewgroup一起构造。

21

Android.view.View:基础类的对象。它是一个用来存储屏幕上特定的一个矩形内布局和内容属性的数据结构。一个View对象处理测距和布局、绘图、焦点交换、滚动条,还有屏幕区域自己表现的按键和手势。View类作为一个基类,为widget(窗体部件)服务,widget是一组用于绘制交互屏幕元素的完全实现子类。Widget处理它们自己的测距和绘图,可以快速的使用它们去构建Android应用程序界面。可用到的widget包括TextView,EditText,InputMethod,Botton,RadioButton,Checkbox和ScrollView等。

Android.view.ViewGroup:一个ViewGroup是一个Android.view.ViewGroup类对象。ViewGroup是一个特殊的view对象,它可以装载和管理一组下层的view其他viewgroup。ViewGroup类作为一个基类,为layout(布局)服务,layout是一组提供屏幕界面通用类型的完全实现子类。Layout可以为一组view构建一个结构。

在Android平台上,用view树和viewgroup节点来定义一个Activity的用户界面,如下图所示。这个树形结构可以构建各种Android程序界面,并且可以使用Android的预定义widget和layout或者自定义的view类型来构建。Android树形用户界面如图4-1所示。

图4-2Android树形界面

所有的viewgroup都包括宽和高。很多还包括边界的定义(margin和border)。可以非常精确地描述宽和高,同时view可以自行调整到适应内容大小,或者适应容器大小。

4.3.2 Android应用系统界面组件

基于Android的手机计算器,是以用户为中心的。因此构建良好的用户界面是很重要的。Android构建用户界面有以下三种方式:

(1)用户界面通过XML配置文件生成。

22

(2)直接用代码生成用户界面。

(3)通过实现用户界面接口形成自定义的用户界面组件。

每种方式各有自己的优缺点及使用环境,下面将结合本文界面实现逐一介绍。 (1)XML文件生成

根据MVC原则,UI应该与程序逻辑相分离,因此,在XML中定义UI结构是强烈推荐的。常用的方式是用图形化的方式来编写布局Layout,这些布局保存在XML文件中,然后编译成资源,在程序中Activity通过setContentView()方法来加载,然后通过findViewByld()方式来获得每一个界面组件的引用。实现过程及步骤。在layout文件夹下定义自己的XML页面,如计算器属性界面的实现如下所示。

xmlns:android=\

android:orientation=\android:layout_width=\ android:layout_height=\ android:background=\>

android:orientation=\ android:layout_weight=\>

android:layout_height=\ android:layout_width=\

Top