吴永辉2024840134--基于android系统的BMI软件的设计与研究.docx
学号:啰g48"134小由幺亭南福皆龙本科毕业论文(设计)基于android系统的BMI软件的设计与探讨作者姓名吴永辉指导老师张永奎关东升所学专业计算机科学与技术班级07计科Bl所属院系信息学院学习年限2024年9月至2024年二包二O一一年五月基于ANDROID系统的BMI软件的设计与探讨I1 .弓I言12 .ANDROID操作系统简介11 .1几种智能手机系统的比较22 .2Android的体系结构与设计实现32.2.1Android体系结构简介32.2.2Android架构42.3.31.inuxKernel(1.inux内核)42.3.4ApplicationFrameworks(应用框架)42. 2.51.ibraries(库)43. 2.6Applications(应用)53 .搭建ANDRolD开发环境53. 1系统需求54. 2安装相应的开发工具55. 2.1下载Eclipse56. 2.2安装ECliPSe57. 2.3安装ADT扩充套件68. 2.4下载并设定AndroidSDK64 .程序开发64 .1创建名为BMl的工程65 .2实现相应的功能6设计运用者界面74.2.2将字串抽离XM1.94.2.3界面功能H4.2.4完成程序相关代码125.程序功能演示与测试195.1程序功能测试195.2保存程序196.结束语21致谢23参考文献25基于android系统的BMI软件的设计与探讨学生姓名:吴永辉指导老师:张永奎关东升内容提要BMl指数是依据身高、体重、年龄以及地域来推断人体胖瘦程度以及是否健康。Android作为GoOgle开发的基于1.inUX平台的开源手机操作系统,它包括操作系统、用户界面和应用程序-移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。JaVa是SUn公司发发布的面对对象的编程语言,可移植性高,是现在用的最广泛的编程语言之一。论文首先介绍了BMl的特点,然后在比较几种常见的智能手机操作系统的基础上,对AndrOid的平台软件的开发和设计实现作了相关介绍。最终用java语言实现BMl在Android平台开发和应用,并介绍相应的功能。关键词嵌入式BMIandroidjavaBMIandroidsystembasedonsoftwaredesignandresearchAbstract:BMIindexisbasedonheight,weight,age,andgeographicextent,andtodeterminewhetherfat,thin,healthybody.GoogledevelopedAndroidasaplatformforopensource1.inux-basedmobilephoneoperatingsystem,whichincludestheoperatingsystem,userinterfaceandapplications-requiredforallmobilephonesoftware,butthereisnopast,theexclusiverighttohinderthemobileindustrybarrierstoinnovation.JavaisSun'scompanysentobject-orientedprogramminglanguage,portability,high,isnowthemostwidelyusedprogramminglanguages.BMIpaperintroducesthecharacteristics,andthencompareseveralcommonsmartphoneoperatingsystem,basedontheAndroidplatformforsoftwaredevelopmentandrelateddesignandimplementationwereintroduced.Finally,BMIjavalanguagedevelopmentandapplicationsintheAndroidplatform,anddescribesthecorrespondingfunction.Keywords:EmbeddedBMIandroidjava1 .引言很多国家及地区每年都会为当地的人口作身高和体重的统计。这些统计数据,都可以转化成为BMl值,从而再统计出当地人口的BMl值分布。依据这个分布,地方健康政府可以推算出当地人口的过重及过轻指标。一般来说,都会采纳统计出来的平均BMI值及其标准差值,再计算出其常态分布的最高5%及最低5%作为过重及过轻指标。我国在这个方面还没有引起太大的重视,有的软件是只是功能单一,没有相应的指导看法。这个软件就依据这个缺点并加入一些人性化的建议说明而开发的。2024年11月5日,GoOgle与其他33家手机制造商(包含摩托罗拉、宏达电、三星、1.G)、手机晶片供应商、软硬体供应商、电信业者所联合组成的开放手持装置联盟(OPenHandSetAlliance),发布了名为Android的开放手机软硬体平台。参加开放手持装置联盟的这些厂商,都会基于AndrOid平台,来开发新的手机业务。2024年9月24日,T-MObiIe首度公布第一台Android手机(GI)的细微环节,同日GOogIe也释出了AndoridSDK1.Orc1.对应用程式开发者而言,1.O代表了开发者可以放心地运用API,而不必再担忧APl有太大的变动。Gl在同年10月20正式发售。在发售前仅针对原T-MObile用户的预购活动中,已经被预购了150万台。在10月21日,OPenHandSetAnianCe公开了全部Android的原始码。从今,开发者拥有了一个完全开放的手机平台。截止目前己经有多款运用AndrOid的智能手机,超过8万的应用程序。在不到两年时间的发展中,美国市场探讨公司NPD2024年发布的统计数据显示,第一季度期间,Android手机在美国市场的销量已超过iPhone,占据该季度美国智能手机总销量的28%,iPhone相应的份额为21%。2 .AndrOid操作系统简介AndrOid是基于1.inUX内核的操作系统,早期由GOOgle开发,后由开放手机联盟开发。它采纳了软件堆层的架构,主要分为三部分。底层以1.inUX内核工作为基础,只供应基本功能;其他的应用软件则由各公司自行开发,以JaVa作为编写程序的一部分。另外,为了推广此技术,GoOgle和其它几十个手机公司建立了开放手机联盟。目前最新版本为Android3.0。2. 1几种智能手机系统的比较手机操作系统一般只应用在高端智能化手机上。目前,在智能手机市场上,中国市场仍以个人信息管理型手机为主,随着更多厂商的加入,整体市场的竞争已经起先呈现出分散化的态势。从市场容量、竞争状态和应用状况上来看,整个市场仍处于启动阶段。目前应用在手机上的操作系统主要有PalmC)S、Symbian、Windowsmobile>1.inux和iPhoneOS、黑寿六种。1. PalmOS这是一种32位的嵌入式操作系统,主要运用于移动终端上。此系统最初由3Com公司的PalmComPUting部开发,目前PaImCOmPUting已经独立成一家公司。PalmC)S与同步软件HOtSynC结合可以使移动终端与电脑上的信息实现同步,把台式机的功能扩展到了移动设备上。PaImOS操作系统由PaIm公司自行开发的,并授权给HandSPring、索尼和高通等设备厂家,这种操作系统更倾向于PDA的操作系统。2. SymbianSymbian是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,特别适合手机等移动设备运用,经过不断完善,可以支持GPRS、蓝牙、SyncM1.,以及3G技术。最重要的是它是一个标准化的开放式平台,任何人都可以为支持Symbian的设备开发软件。与微软产品不同的是,Symbian将移动设备的通用技术,也就是操作系统的内核,与图形用户界面技术分开,能很好的适应不同方式输入的平台,也可以使厂商可以为自己的产品制作更加友好的操作界面,符合特性化的潮流,这也是用户能见到不同样子的Symbian系统的主要缘由。现在为这个平台开发的java程序己经起先在互联网上盛行。用户可以通过安装这些软件,扩展手机功能。3. WindowsmobileWindowsMobile系统包括PocketPC和SmartPhOne以及MediaCenters,PocketPC针对无线PDA,SmartPhone专为手机,已有多个来自IT业的新手机厂商运用,增长率较快。依据微软正式的说法:“Wind。WSMobile将熟识的WindOWS体验扩展到了移动环境中,所以您可以马上运用它投入工作。”4. 1.inux1.inUX系统是一个源代码开放的操作系统,目前已经有很多版本流行。但尚未得到较广泛的支持。1.inUX进入到移动终端操作系统近二年多时间,就以其开放源代码的优势吸引了越来越多的终端厂商和运营商对它的关注,包括摩托罗拉和NTTDoCoMo等知名的厂商。已经开发出的基于1.inUX的手机有摩托罗拉的A760、A768、CEC的e2800、三星的i519等。2024年6月在日本东京BlGSIGHT展览馆举办的“1.inuxWorldExpoZTokyo2024”博览会上,日本手机大厂商NEC则展示了其采纳1.inUX操作系统的手机。我国的大唐电信也于7月宣布将1.inUX作为其TD-SCDMA3G手机操作系统。1.inUX与其它操作系统相比是个后来者,但1.imlX具有二个其它操作系统无法比拟的优势。其一,1.inUX具有开放的源代码,能够大大降低成本。其二,既满意了手机制造商依据实际状况有针对性地开发自己的1.inUX手机操作系统的要求,又吸引了众多软件开发商对内容应用软件的开发,丰富了第三方应用。然而1.inUX操作系统有其先天的不足:入门难度高、熟识其开发环境的工程师少、集成开发环境较差;由于微软PC操作系统源代码的不公开,基于1.inUX的产品与PC的连接性较差;尽管目前从事1.inUX操作系统开发的公司数量较多,但真正具有很强开发实力的公司却很少,而且这些公司之间是相互独立的开发,很难实现更大的技术突破。5. iPhoneOSiPhoneC)S或C)SXiPhone是由苹果公司为iPhone开发的操作系统。它主要是给iPhone和iPodtouch运用。就像其基于的MaCoSX操作系统一样,它也是以DarWin为基础的。iPhoneOS的系统架构分为四个层次:核心操作系统层(theCoreOSlayer),核心服务层(theCoreServiceslayer),媒体层(theMedialayer),可轻触层(theCocoaTouchlayer)o6. BlackBerry“黑莓”BIaCkBerry是美国市场占有率第一的智能手机,这得益于它的制造商RlM(ReSearChinMOtion)较早地进入移动市场并且开发出适应美国市场的邮件系统。大家都知道BlaCkBerry的经典设计就是宽大的屏幕和便于输入的QWERTY键盘,所以BIaCkBerry始终是移动电邮的巨无霸。黑莓机的另一个特色,就是内建多款实时通讯软件,包括BlaCkBerryMeSSenger、GoogleTaIk及YahooMessenger,不过目前只能用英文做沟通,软件仍不支持对中文字体的显示。正因为是正统的商务机,所以它在多媒体播放方面的功能特别孱弱,或许它在将来应当着力改善这个弱点,因为手机功能的整合是大势所趋,人们不会只满意于单一的功能。2.2AndrOid的体系结构与设计实现2.2.1AndrOid体系结构简介Android平台是一组面对移动设备的软件包,它包含了一个操作系统、中间件和关键应用程序。开发人员可以运用AndroidSDK(软件开发工具包)为这个平台创建应用程序。应用程序运用JaVa语言编写并在DalVik之内运行。DaIVik是一款量身定制的虚拟机,它专为嵌入式应用设计,运行在1.inUX内核上层。2.2.2Android架构下图显示了Android操作系统的主要组件。SystemServicesApplicationsMIDPAPPSStatusBat-APP1.auncherHomeDialerContactsBrowserPackageManager"TelephonyManagerApplication1.ibrariesMIoFVJ三R三NotificationManagerWindowManagerViewSystemResourceContentManagerProvidersActivityManager1.ibrariesAndroidRuntimeMIDPRuntimeMediaFrameworkSurfacecrlMMrgjwCoreJava1.ibrariesMP3,H.264,PNGJPEGOpenG1.jES<_.gjUy1.ibc1.ibWebCoreFreelypeSS1.SQ1.ite1.INUXKERNE1.DisplayDriverCameraDriverKeypadDriverBluetoothDriverWiFiDriverM-SystemsDriverBinder(IPC)DriverUSBDriverAudioDriversPowerManagement图2.1Android操作系统的主要组件2.3.31.inuxKerneI(1.inux内核)Android依靠1.inUX2.6版,供应核心系统服务:平安、内存管理、进程管理、网络组、驱动模型。内核部分还相当于一个介于硬件层和系统中其他软件组之间的一个抽象层次。2.3.4AppIicationFrameWOrkS(应用框架)Android的核心应用程序就是依靠框架层次APl开发的,程序员们可以充分运用这些API。应用架构设计的初衷是:简化组件复用机制;任何应用都能发布自己的功能,这些功能又可以被任何其他应用运用(当然要受来自框架的强制平安规范的约束)。和亚用机制相同,框架允许组件的更换。2. 2.51.ibraries(库)Android包含一套C/C+库,AndrOid系统的各式组件都在运用。这些功能通过Android应用框架暴露给开发人员。Android的核心类库供应JaVa类库所供应的绝大部分功能。每个AndrOid应用都运行在自己的进程上,享有DaWik虚拟机为它安排的专有实例。为了支持多个虚拟机在同一个设备上高效运行,DalVik被改写过。DaIVik虚拟机执行的是DalVik格式的可执行文件(.dex)该格式经过优化,以降低内存耗用到最低。JaVa编译器将JaVa源文件转为CIaSS文件,CIaSS文件又被内置的dx工具转化为dex格式文件,这种文件在DalVik虚拟机上注册并运行。在一些底层功能一比如线程和低内存管理方面,DaIVik虚拟机是依靠1.inUX内核的。2 .2.6AppIications(应用)AndrOid将预装一组核心应用程序,包括email客户端、短信服务、日历日程、地图服务、阅读器、联系人和其他应用程序。全部应用程序都是JaVa编程语言编写的。3 .搭建AndrOid开发环境3. 1系统需求编写Android的应用程序,须要一套个人电脑系统。至于操作系统的部份,几个主流操作系统都有支持。支持的操作系统如下:WindowsXP、ViSta或WindOWS7MacOSX10.4.8或之后版本(适用x86架构的InteIMac)1.inUx(官方于Ubuntu6.10DapperDrake上测试)3.2安装相应的开发工具3.2.1下载ECIiPSe首先须要下载Android开发时会用到的整合开发环境ECliPSe。目前Android应用程序只支持运用Java程式语言来编写AndrOid应用程式。所以开发前必需先安装JaVa开发套件(JaVaDevelopmentKit,JDK)0各平台的JDK可至:/java.sun/下载。MacOSX作业系统则已内建JDK。安装好JDK后,可以前往ECliPSe网站下载ECIiPSe这个便利的整合开发环境。下载EeliPSe时可以选EclipseIDEforJavaDeVeIoPers或EclipseIDEforJavaEEDeVeIOPers这两种版本,只有这两种版本才会预装氏IiPSeJDT扩充套件。我选择的是EclipseIDEforJavaDevelopersfiS0下载完同样先解压缩到适当书目下。3.2.2安装ECIiPSeECIiPSe不须要安装,只要确认你的系统上有安装Java,即可干脆开启ECliPSe资料夹,点击氏IiPSe起先执行EeIiPSe整合开发环境。第一次启动ECIiPSe时会弹出视窗让你确定预设的工作书目。一般运用氏IiPSe预设的工作书目即可。进入到氏IiPSelDE后,就能安装Android开发工具扩充套件。3.2.3安装ADT扩充套件在ECIiPSe上安装Android开发工具(ADT)。我采纳的是离线安装,前往:/developer.androidZsdk/adt_download.html,手动下载最新的开发工具版原来离线安装。下载完最新的ADT扩充套件后,打开氏IiPSe开发环境,找到屏幕上方的选单列,选择IHelP->SoftwareUpdates选项,这选项会带出一个新视窗。选择AvailableSoftware标签,选择右方的AddSite.(新增网站)按钮,会弹出一个输入框。选择右上角的1.ocal.按钮,并选取刚下载的Android最新开发工具档案,选到之后按下“0K”按钮离开。在视窗中全选新出现项目的全部选项后,按下右方的UnStal1按钮。ECIiPSe会花一点时间起先安装ADT扩充套件。3. 2.4下载并设定AndrOidSDK到google官网上下载最新版本的AndrOidSDK并解压。打开偏好设定页面(Preference),选择AndrOid标签(请确认您己安装好ADT扩充套件,Android标签才会出现在偏好设定页面中),在SDK1.oCation栏位按下"Browse."键,选择刚刚解压缩完的androiC1.Sdk文件夹所在地,然后按下视窗右下角的应用(APPIy)按钮。这样一来,Andre)idSDK就算是设定好啦。设定好AndroidSDK后,就拥有了一个完整的Android开发环境。4.程序开发4. 1创建名为BMI的工程选择File->New->Project,会弹出NewProject对话视窗,将新工程名称命名为BMI。在内容栏里,选择在工作区域中建立新工程(Createnewprojectinworkspace)o对"NewAndroidProjeCt”对话框中相应的属性中填入以下的值:名称值ProjectNameBMIApplicationNameBMICreateActivityBmiMinSDKVersion3填好值后按下Finish按钮,就建立好新工程了。4.2实现相应的功能在Android开发java程序时须要划分成各种功能模块来进行相应的开发。4. 2.1设计运用者界面先打开res/IayoUt/main.xmlC定义一个基本BMl程序所需的身高(Height)输入栏位,就会用到EditText,与TeXtVieW界面元件,其描述如下:1 <TextView2 android:IayOU1.Width="fil1.parent"3 android:IayoUt.height="WraP_conlenl”4 android:text="身高(Cm)”5>6 <EditTextandroid:id="+id/height"7 androidlayout-width=,fill-parent"8 android:layout_height=,wrap_content"9 androidnumeric=,integer"10androidtext=,'1111>可以看到EditText界面元件描述的基本的组成与TextView界面元件相像,都用到了android:IayOUt_width与IandrOidFayouJheight属性。另夕卜,指定的另夕卜两个属性android:numeric、android:text则是EditTeXt界面元件的特殊属性。android:text属性是继承自TextView界面元件的属性。将Iandroictnumeric指定为integer,可以限制运用者只能在EditTeXt文字栏位中输入整数数字。android:text属性则是指定EditTeXt界面元件预设显示的文字(数字)。再来看看BUtton(按钮)界面元件<Buttonandroid:id="+id/submit"android:layout_width=nfill_parentHandroid:layout_height="wrap_content"android:text="计算BMI”>Button界面元件同样有android:IayoUt_width与android:IayOUt_height属性,另外一个android:text属性则用来显示按钮上的文字。完整的main.xml界面描述档如下:<?xmlversion="1.0"encoding="utf-8,7><1.inear1.ayoutXmlnsiandroid=1':/schemas.androidapkresandroid"androidorientation="vertical"android:layout_width=,fill_parentMandroid:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:IayOUl_height="wrap_contenl”android:text="身高(Cm)”><EditTextandroid:id="+id/height"android:IayOUI_width="fill_parenl”android:layout_height="wrap_content"android:numeric="integer"androidtext="11><TextViewandroid:IayoUt_width="fin_parent”android:layout_height="wrap_content"androidHext="体重(kg)”><EditTextandroid:id=11+id/weight,android:IayOUI_width="fill_parenl”android:IayOUl_height="wrap_contenl”android:numeric="inleger”android:text=,11><Butonandroid:id=,'+id/submit"android:IayOUI_width="fiH_parenl”android:IayOUI_heighl="wrap_conlenl”android:IeXt="计算BMI”><TextViewandroidid=,()+idresult"android:layout_width="fi11_parent,android:layout_height="wrap_content"android:text=,H/><TextViewandroid:id="+id/suggest"android:IayoUt_width="fiH_parent”android:layout_height="wrap_content"android:text="><1.inear1.ayout>可以启动模拟器检视执行结果。或是在页面标签下选择1.ayout标签,来预览页面配置。4.2.2将字串抽离XM1.打开res/values/strings.xml原始的内容为<?xmlversion="1.0"encoding="utf-8'17><resources><stringname="app-name">BMI</string><resources>里面只定义了一个字串appjame,用来表示应用程式名称。会看到表示字串的格式为<stringname="识别代号”>文字叙述<string>将前面的叙述抽取出来,整理进StringS.xml文件。完整的StringS.xml文件如下:<?xmlversion="1.0"encoding="utf-8'17><resources><stringname="app-name">BMI</string><stringname="height">(cm)<string><stringname=',weight,>ffi(kg)<string><stringname="bmi_btn">计算BMl<string><stringname="bmi_result">你的BMl值是/string<resources>在StringS.xml文件中,在原本的app_name字串外,自行定义了另外几个字串。假如再次开启R.java档,会发觉文件中的String类别中也自动索引了上面定义好的字串:publicstaticfinalclassstring(publicstaticfinalintapp_name=0x7ft)40000;publicstaticfinalintbmi_btn=0x7f040003;publicstaticfinalintbmi_result=0x7f040004;publicstaticfinalintheight=0x7R)40001;publicstaticfinalintweighl=0x7f040002;)接着,把这些字串应用到之前定义好的XM1.描述档中。透过运用StringZ识别符号这样存取String类型的格式,来取代main.xml档案中原本写死的文字叙述。完整的程序码如下:<?xmlversion="1.0"encoding="utf-8',7><1.inear1.ayoutxmlns:android=":/schemas.androidapkresandroid"android:orientation="vertical"androidlayout-width=,fiI1.parent"android:layout_height="fill_parent"><TextViewandroid:IayOUt_width="fiH_parent”android:layout_height="wrap_content"android:text="string/height"><EditTextandroid:id="+id/height"android:layout-width="fiI1.parent11android:layout_height="wrap_content"android:numeric="integer”android:text=""><TextViewandroid:layout_width="fi11.parent',android:layout_height="wrap_content"android:text="string/weight"><EditTextandroid:id="+id/weight"android:IayOUt_width="fiH_parent”android:layout_height="wrap_content"android:numeric="integer”androicktext="”><Buttonandroid:id="+id/submit"android:layout_width="wrap_content"android:layout_height="wrap_content"androidtext="(3)stringbmi-btn,><TextViewandroid:id="+id/resualt"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="',><TextViewandroid:id="+id/suggest"android:IayOUt_width="fiH_parent”android:layout_height="wrap_content"android:text="><1.inear1.ayout>再次运行Android模拟器,会看到与前一节完全相同的界面。但就界面而言,透过将描述字串统一集中在string.xml中,以后要修改界面时更有弹性了。至此已经完成了BMl应用程序负责显示(VieW)的部份。图4.1、4.2为界面显示。图4.1界面显示图4.2界面显示界面功能1 .加入按钮目前的对话框中,并没有供应离开对话框的方法。所以得按下Undo按钮来离开对话框,有点不便,所以为这个对话框加入一个确认按钮。.setPositiveButton("确认二newDialoglnterface-OnClick1.istcnerO©OverridepublicvoidonClick(DialogInterfacedialog,intwhich)/TODOAuto-generatedmethodstub)2 .XmlR存取识别符号:要运用一个介面元件,第一件事就是定义出介面描述档。大部分的介面元件(如1.inear1.ayout、TeXtVieW)不须要在程序中作后续处理,因此可以干脆描述。不过对于那些将在程序中被参考(reference)到的介面元件(如按钮BUtton、文字输入栏位EditTeXt),我们须要透过在XM1.描述档中,定义该介面元件的android:id识别符号属性。之后在程式中全部与这个介面元件有关的操作,都能依据andr0id:id识别符号来在调用这个介面元件。<EditTextandroid:id="+id/height">android:id属性的内容长得比较特殊:+id/heightheight是这个介面元件的android:id。以后的程序中会运用口来取得这个介面元件。+id的意思是我们可以通过这个识别符号来限制所对应的介面元件,R类别会自动配置一个位址给这个介面元件。R类别的内容则可以透过查看RjaVa得知。4.2.4完成程序相关代码BMl值的算法是体重除以身高的平方。用计算式来表示,就是体重(Weight)/(身高(height)*身高(height)srccomdemoandroidbmiBmiJava的代码:importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.Content.DiaIogInterface;importandroid.content.Intent;importandroid.Content-SharedPreferences;.Uri;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View-OnClick1.istcner;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.TextView;importandroid.widget.Toast;publicclassBmiextendsActivitypublicstaticfinalStringPREF="BMI_PREF"publicstaticfinalStringPREF_HEIGHT=*Calledwhentheactivityisfirstcreated.*/©OverridepublicvoidonCreate(BundleSavedInstanceState)super.onCreate(savedInstanceState);SetContentView(R.Iayout.main);findViews();restorePrefs();set1.istensers();)privateButtonbutton_calc;privateEditTextfield_height;privateEditTextfield_weight;privateTextViewview_result;privateTextViewview_suggest;privatevoidfindViews()button_calc=(Button)findViewById(R.id.submit);field_height=(EditText)findViewById(R.id.height);field_weight=(EditText)findViewById(R.id.weight);view_result=(TextView)findViewById(R.id.result);view_suggest=(TextView)findViewById(R.id.suggest);/notpopvirtualinputkeyboard/field