1、本科毕业设计题目基于ANDROID的用药安全客户端的开发姓名学号2010A21219院(系、部)数学与信息技术学院专业网络工程班级2010级3班指导教师完成时间2014年4月邢台学院2014届本科毕业设计I摘要对用药安全客户端的具体实现的技术进行了分析,主要是SQLITE数据库技术的使用、JSON数据的解析、使用HTTP协议的POST请求的网络数据的下载,由ANDROID四大基本组件ACTIVITY、SERVICE、BROADCAST、CONTENTPROVIDER、以及INTENT和FRAGMENT配合完成。用药安全客户端软件运行于ANDROID平台,提供对症找药、服药安全警示、家庭药箱、药
2、品/保健食品信息查询、附近药店等功能。用药安全客户端包含的主要组件有欢迎界面、侧边栏DRAWER、ACTIONBAR、LISTVIEW图文混排、VIEWPAGERINDICATOR和VIEWPAGER分页效果实现、GRIDVIEW、SPINNER、地图、搜索、CAMERA等。家庭药箱和服药安全警示,主要由数据库SQLITEOPENHELPER、通知NOTIFICATION、广播BROADCASTRECEIVER等技术的实现。而对症找药和保健食品则主要用到JSON数据解析、ASYNCTASK异步任务、LISTVIEW图文混排、ACTIVITY之间数据传递等技术实现。关键词用药安全、ANDROID
3、;SQLITE;JSON邢台学院2014届本科毕业设计IIABSTRACTFORDRUGSAFETYCLIENTSPECIFICIMPLEMENTATIONTECHNOLOGYWEREANALYZED,ANDTHEMAINWASTHEUSEOFSQLITEDATABASETECHNOLOGY,PARSINGTHEJSONDATA,USINGTHEHTTPPOSTREQUESTNETWORKDATADOWNLOAD,THEACTIVITYBYTHEANDROIDFOURBASICCOMPONENTS,SERVICES,BROADCAST,CONTENTPROVIDER,ANDINTENTANDF
4、RAGMENTSTOCOOPERATEDTOCOMPLETEDRUGSAFETYCLIENTSOFTWARERUNNINGONTHEANDROIDPLATFORM,TOPROVIDEFINDDRUGSACCORDINGTOSYMPTOMSOFILLNESS,MEDICATIONSAFETYWARNING,FAMILYMEDICINE,MEDICAL/HEALTHCAREFOODINFORMATIONQUERY,NEARAPHARMACY,ANDTHEOTHERFUNCTIONSDRUGSAFETYCLIENTCONTAINSTHEMAINCOMPONENTSWEREWELCOMESCREEN,
5、THESIDEBARDRAWER,ACTIONBAR,LISTVIEWBYMIXED,VIEWPAGERINDICATORANDVIEWPAGERPAGINGEFFECTIMPLEMENTATION,THEGRIDVIEW,SPINNER,MAPS,SEARCH,CAMERA,ETCFAMILYMEDICINECABINETANDMEDICATIONSAFETYWARNING,MAINLYUSEDTHEDATABASESQLITEOPENHELPER,NOTIFICATIONS,THEIMPLEMENTATIONOFTHENOTIFICATION,RADIOBROADCASTRECEIVERA
6、NDOTHERTECHNOLOGYWHILESYMPTOMATICFORMEDICINEANDHEALTHFOODMAINLYUSEDTHEJSONDATAPARSING,ASYNCTASKASYNCHRONOUSTASKS,LISTVIEWBYMIXED,THEDATATRANSMISSIONBETWEENTHEACTIVITYANDOTHERTECHNICALIMPLEMENTATINGKEYWORDSMEDICATIONSAFETYANDROIDSQLITEJSONDATA邢台学院2014届本科毕业设计III目录1前言12关键技术概述121ANDROID操作系统分析1211ANDROID
7、分析1212ANDROID架构122SQLITE分析223ANDROID布局管理器324ANDROID四大基本组件3241关于ACTIVITY3242关于SERVICE服务6243关于CONTENTPROVIDER内容提供者7244关于BROADCASTRECEIVER广播接收器725INTENT的详细解析8251INTENT分析8252INTENT的抽象描述8253ANDROID如何解析INTENT93系统需求931用户需求932系统设计的原则104ANDROID用药安全的设计与实现1041系统体系结构1042程序的文件结构和用途1143功能模块对照表13邢台学院2014届本科毕业设计IV5
8、详细设计1351首页的实现1352对症找药1453保健食品1454搜索药品名1555左抽屉1556家庭药箱1657服药提醒1658附近药店1759条码扫描176用药安全的运行测试1861系统环境的搭建1862软件的运行测试18总结22参考文献23谢辞24邢台学院2014届本科毕业设计11前言用药安全是一款侧重于家庭用药安全以及平时医疗保健的用药安全客户端软件,提供全面的常用药品使用信息,具有实用性、便利性、多样性。通过此软件可以查看病症,查找用药方案,方便用户平时生活,节约看诊时间,减轻普通病看诊消费的经济压力。本设计的任务是基于ANDROID平台,完成用药安全客户端的设计与实现。本文将分析对
9、基于ANDROID平台开发用药安全客户端的具体实现的技术,报告完成用药安全客户端的设计与实现的实践成果。2关键技术概述21ANDROID操作系统分析211ANDROID分析ANDROID是GOOGLE在2007年11月宣布的基于LINUX平台的开源手机操作系统的名称,而在ANDROID系统底层方面,ANDROID使用C/C作为开发语言8。该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的解决方案。ANDROID系统就是一个开发式的手机和平台电脑操作系统9,早期由GOOGLE开发,后由开放手机联盟开发1。它提供了从底层操作系统到上层的程序界面的所有软件,
10、使用这个平台无需缴纳任何的授权许可费用,同时不同的厂商还可以根据自身的需求修改和扩展ANDROID平台。在ANDROID平台下,除了应用程序运行的载体虚拟机之外,所有的ANDROID应用程序之间是完全平等的。所有的应用程序都运行在虚拟机上面,虚拟机提供了一系列用于应用程序和硬件资源间通信的API。ANDROID打破了应用程序之间的界限,在ANDROID平台下开发应用程序,可以很方便的实现应用程序之间的数据共享。一个应用程序不但可以通过API访问系统提供的功能,还可以通过申明自身的功能供其他应用程序调用2。ANDROID为开发人员提供了大量的使用库和工具,使得开发人员可以快速地创建自己的应用程序
11、。例如ANDROID将著名的GOOGLEMAP集成进来,开发人员通过简单的几行代码就可以快速的开发出基于地图的应用。212ANDROID架构图21显示的是ANDROID操作系统的主要组件。ANDROID同一个核心应用程序包一起发布,该应用程序包括EMAIL客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用JAVA编写的。ANDROID应用程序框架即开发者也完全可以访问核心应用程序使用的API框架。该应用程序架构用来简化组件软件的重用任何一个应用程序都可以发布它的功能模块并且任何其邢台学院2014届本科毕业设计2他的应用程序都可以使用其所发布的功能模块(不过得遵
12、循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。图21ANDROID系统架构图22SQLITE分析SQLITE是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。ANDROID在运行时RUNTIME集成了SQLITE,所以每个ANDROID应用程序都可以使用SQLITE数据库。SQLITE支持多数SQL92标准,很多常用的SQL命令都能在SQLITE上面使用,除此之外ANDROID还提供了一系列自定义的方法去简化对SQLITE数据库的操作3。S
13、QLITE由以下几个组件组成SQL编译器、内核、后端以及附件。SQLITE通过利用虚拟机和虚拟数据库引擎VDBE,使调试、修改和扩展SQLITE的内核变得更加方便。SQLITE和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在CREATETABLE语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLITE将检查它的类型。如果该类型与关联的列不匹配,则SQLITE会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储4。邢台学院2014届本科毕业设计323ANDROID布局管理器ANDROID本身是一个权限分立的操作系统
14、。在这类操作系统中,每个应用都以唯一的该系统主要用到的布局有线性布局,帧布局和相对位置布局。(1)LINEARLAYOUT类线性布局是最简单的布局之一。ANDROIDORIENTATION可以设置线性布局的朝向,可以是水平(HORIZONTAL)或者垂直(VERTICAL)两种排列方式。同时使用ANDROIDGRAVITY设置控件的对齐方式,还可以通过设置控件的WEIGHT参数控制各个控件在容器中的相对大小。(2)FRAMELAYOUT类FRAMELAYOUT帧布局在屏幕上开辟出了一块区域,在这块区域上可以添加多个子控件,但是所有的子控件都被对齐到屏幕的左上角。帧布局的大小由子控件尺寸最大的那
15、个子控件来决定。如果子控件一样大,同一时刻只能看到最上面的子控件,因为在FRAMELAYOUT中,子控件是通过栈来绘制的5。(3)RELATIVELAYOUT类RELATIVELAYOUT相对位置布局,即子控件的位置可以取决于兄弟控件或父控件的位置,与LINEARLAYOUT相比,可以减少嵌套,避免生成不要的对象,代码简洁,是本程序中主要使用的布局。24ANDROID四大基本组件ANDROID四大基本组件分别是ACTIVITY,SERVICE服务,CONTENTPROVIDER内容提供者,BROADCASTRECEIVER广播接收器。241关于ACTIVITYACTIVITY是ANDROID最
16、常用的组件,是应用程序的表示层,ACTIVITY一般通过VIEW来实现应用程序的用户界面,相当于一个屏幕,用户与程序的交互是通过该类实现的。ACTIVITY类创建了一个窗口,开发人员可以通过SETCONTENTVIEWVIEW接口把UI放到ACTIVITY创建的窗口上,当ACTIVITY指向全屏窗口时,也可以用其他方式实现作为漂浮窗口(通过WINDOWISFLOATING的主题集合),或者嵌入到其他的ACTIVITY,使用ACTIVITYGROUP6。ANDROID平台是个手机作业系统。撇掉其他功能不谈,手机的特性,就是应该能随时在未完成目前动作的时候,暂停正在使用的功能,切换到接电话、接收短
17、信模式,而且在接完电话回到应用程序时,还希望能看到一样的内容。现在用户使用智能手机,大多已习惯使用多工的作业系统如WINDOWSMOBILE,可以在用手机听音乐的同时,执行其他多个程序。同时执行多个程序有它的明显好处,但也有它的缺点。每多执行一个应用程序,就会多耗费一些系统内存,而手机里的内存是相当有限的。当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统运行时就会觉得越来越慢,甚至不稳定。为了解决这个问题,ANDROID引入了一个新的机制生命周期。邢台学院2014届本科毕业设计4ANDROID应用程序的生命周期是由ANDROID框架进行管理,而不是由应用程序直接控制。通常,每一个应
18、用程序入口一般会是一个活动的ONCREATE方法,都会占据一个进程。当系统内存即将不足的时候,会依照优先级自动进行进程的回收。不管是使用者或开发者,都无法确定应用程序何时会被回收。关于进程的生命周期将在下一节中介绍,本节主要介绍活动的生命周期。一个活动类别除了ONCREATE方法之外,还预先定义了ONPAUSE暂停、ONRESUME继续等的基本方法,当从一个活动切换到另一个活动的时候,原来的活动将经过一连串的状态改变。开发者可以在程序中添加一些各状态相对应的流程,每次活动状态改变时,就会执行相对应的流程。要让用户有好的使用体验,活动需要在各个周期中负责保管状态、恢复状态、传送资料等工作。AND
19、ROID的虚拟机是使用堆栈管理。主要有四种状态1活动状态活动状态是指用户启动应用程序或活动后,活动运行中的状态。在ANDROID平台上,同一个时刻只会有一个活动处于活动或运行状态。其他的活动都处于未启动、停止或是暂停的状态。2暂停状态暂停状态是指当活动暂时暗下来,退到背景画面的状态。当警告对话框或电话来了时,都会让原来运行的活动退到背景画面。新出现的警告对话框等界面元件盖住了原来的活动画面。活动处在暂停状态时,用户无法与原活动互动。3停止状态停止状态是指有其他活动正在执行,而这个活动己经离开屏幕,不再动作的状态。通过按返回键,可以调出所有处于停止状态的应用程序列表。处于停止状态的活动,还可以通
20、过通知来唤醒。4已回收或未启动状态已回收或未启动状态是指活动尚未被启动、已经被手动终止或己经被系统回收的状态。要手动终止活动,可以在程序中调用FINISH方法。如果是被系统回收,可能是因为内存不足了,所以系统根据内存不足时的回收规则,将处于停止状态的活动所占用的内存回收。图22所示的七个状态又可以归纳成三组1资源分配创建/销毁完整的活动生命周期由创建状态开始,由销毁状态结束。创建时分配资源,销毁时释放资源。2可见与不可见启动/重新启动/停止当活动运行到启动状态时,就可以在屏幕上看到这个活动。相反地,当活动运行到停止状态时,这个活动就会从屏幕上消失。当用户按下返回键回到上一个活动时,会先到重新启
21、动状态,再到一般的启动状态。邢台学院2014届本科毕业设计53用户取得屏幕的控制权继续/暂停当有个警告对话框、短信、电话等信息进入时,原来的活动会进入暂停状态,暂时放弃屏幕的控制权,被中断到背景去,将前景交给优先级高的事件。当这些优先级高的事件处理完后,活动就改进入继续状态,此时又取得屏幕的控制权。图22ACTIVITY生命周期由实际运行来看,我们可以归纳出所有ANDROID应用程序都遵循的运作流程1一般启动启动一个活动的基本流程为ONCREATEONSTARTONRESUME。该流程首先分配资源给这个活动创建状态,然后将活动的内容显示到屏幕上启动状态在一切就绪后,取得屏幕的控制权恢复状态,用
22、户可以开始使用这个程序。2调用另一个活动调用另一个活动的基本流程为ONAUSE1ONCREATE2ONSTART20NRESUME2ONSTOP1。该流程首先冻结原来的活动,再交出屏幕控制权直到活动2完成一般启动流程后,活动1才会被停止。邢台学院2014届本科毕业设计63回到原来活动回到原来活动的基本流程为ONPAUSE2ONRESTART1ONSTART1ONRESUME1ONSTOP2ONDESTROY2。另外按返回键也可以回到原来的活动。4退出结束退出结束的基本流程为ONPAUSEONSTOPONDESTROY。如果程序中有直接调用FINISH方法来关闭活动的话,系统会跳过先冻结的阶段,
23、直接暂停,停止,然后销毁。5回收后再启动回收后再启动的基本流程为ONCREATEONSTARTONRESUME。如果被回收掉的活动一旦又重新被调用时,会像一般启动一样再次调用活动的ONCREATE方法。当在模拟器上已经执行过多个应用程序,只要按下返回键,就会开启最近一次开启过的活动。所以如果要让再次被创建的活动跟原来开启过的一样,那么在活动之间切换时,就要保存资料即在每次活动运行到暂停或停止状态时先保存资料,然后在创建时将资料读出来。242关于SERVICE服务一个SERVICE是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的
24、媒体播放器。在一个媒体播放器的应用中,应该会有多个ACTIVITY,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的ACTIVITY,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个ACTIVITY会使用CONTEXTSTARTSERVICE来启动一个SERVICE,从而可以在后台保持音乐的播放。同时,系统也将保持这个SERVICE一直执行,直到这个SERVICE运行结束。另外,我们还可以通过使用CONTEXTBINDSERVICE方法,连接到一个SERVICE上(如果这个SERVICE还没有运行将启动它)。当连接到一个SERVICE之后
25、,我们还可以SERVICE提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。SERVICE使用步骤如下继承SERVICE类;ANDROIDMANIFASTXML配置清单文件中节点里对服务进行配置;服务不能自己运行,需要通过CONTEXSTARTSERVICE或CONTEXBINDSERVICE启动服务。通过STARTSERVICE方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行想停止服务要调用CONTEXTSTOPSERVICE,此时系统会调用ONDESTORY,使用此方法启动时,服务首次启动系统先调用服务的ONCREATEONSTART,如果服务
26、已经启动再次调用只会触发ONSTART方法使用BINDSERVICE启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的ONCREATEONBIND,如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务ONUNBINDONDESTORY,想主动解除绑定可使用CONTEXUNBINDSERVICE,系统依次调用ONUNBINDONDESTORY。邢台学院2014届本科毕业设计7243关于CONTENTPROVIDER内容提供者CONTENTPROVIDER,即内容提供商或者内容提供器。再具体解释就是CP是移动数据业务内容提供商,或者
27、叫移动增值业务内容提供商。CONTENTPROVIDER认证,即CP认证,指允许内容提供商提供内容。(如腾讯CP认证允许QCC商家提供QCC虚拟服务内容并自行销售。)ANDROID中的CONTENTPROVIDER机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的方式之一,还有文件,SHAREPREFERENCE,SQLITE数据库等方式存储共享数据库,但是CONTENTPRIVIDER更好的提供了数据共享接口的统一性。在ANDROID系统中,没有一个公共的内存区域,供多个应用共享存储数据。ANDROID提供了一些主要数据类型的CONTENTPROVIDER,比如音频、视频、图片和私
28、人通讯录等。可在ANDROIDPROVIDER包下面找到一些ANDROID提供的CONTENTPROVIDER。可以获得这些CONTENTPROVIDER,查询它们包含的数据,当然前提是已获得适当的读取权限。总的一句内容提供器是应用程序之间共享数据的接口,ANDROID系统将这种机制应用到方方面面。比如联系人提供器专为不同应用程序提供联系人数据;设置提供器专为不同应用程序提供系统配置信息,包括内置的设置应用程序等。244关于BROADCASTRECEIVER广播接收器广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的比如,通知时区改变、电池电量低、拍摄了一
29、张照片或者用户改变了语言选项。应用程序也可以进行广播比如说,通知其它应用程序一些数据下载完成并处于可用状态。应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BROADCASTRECEIVER基类。广播接收器没有用户界面。然而,它们可以启动一个ACTIVITY来响应它们收到的信息,或者用NOTIFICATIONMANAGER来通知用户。通知可以用很多种方式来吸引用户的注意力闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。BROADCASTRECEIVER事件分类系统广播事件,比如ACTION_BOOT_CO
30、MPLETED(系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。用户自定义的广播事件有以下几种注册广播事件注册方式有两种,一种是静态注册,就是在ANDROIDMANIFESTXML文件中定义,注册的广播接收器必须要继承BROADCASTRECEIVER类;另一种是动态注册,是在程序中使用CONTEXTREGISTERRECEIVER注册,注册的广播接收器相当于一个匿名类。两种方式都需要INTENTFILTER。发送广播事件通过CONTEXTSENDBROADCAST来发送,由INTENT来传递注册时用
31、到的ACTION。邢台学院2014届本科毕业设计8接收广播事件当发送的广播被接收器监听到后,会调用它的ONRECEIVE方法,并将包含消息的INTENT对象传给它。ONRECEIVE中代码的执行时间不要超过5S,否则ANDROID会弹出超时DIALOG。25INTENT的详细解析251INTENT分析所谓INTENT,就是一种运行时的绑定机制,在应用程序运行时连接两个不同的组件。一般的应用是通过INTENT向ANDROID系统发出某种情求或者意愿,然后ANDROID系统会到根据请求查询各个组件声明的INTENTFILTER,找到需要的组件并运行它。ACTIVITY、SERVICE和BROADC
32、ASTRECEIVER,他们都是通过INTENT机制激活的,不同类型的组件有传递INTENT的不同方式7。而本系统中就是要激活一个新的ACTIVITY,可以通过调用CONTEXTSTARTACTIVITY方法。这个方法需要传入的INTENT参数也称为ACTIVITYACTIONINTENT活动行为意图,为了能够使用该方法,所有的ACTIVITY类都必须在ANDROIDMANIFESTXML文件中定义有相关的“ACTIVITY”项。然后根据INTENT对象对目标ACTIVITY描述的不同,来启动与之相匹配的ACTIVITY或者传递信息。252INTENT的抽象描述在ANDROID参考文档中,对意
33、图的定义是执行某操作的一个抽象描述。该抽象描述的具体内容如下首先,它是要执行的动作的一个简要描述,如查看、修改等,ANDROID定义了一套标准动作。此外,还可以根据应用的需要,定义自己的动作,并可定义相应的活动来处理自定义的动作。其次,是执行动作要操作的数据,ANDROID采用指向数据的一个URI方式来实现。另外,除了动作和数据这两个重要属性外,还有一些附加属性类别被执行动作的附加信息。例如LAUNCHER_CATEGORY表示意图的接受者应该在LAUNCHER中作为顶级应用出现而ALTERNATIVECATEGORY表示当前的意图是一系列的可选动作中的一个,这些动作可以在同一个数据上执行。数
34、据类型显式指定意图的数据类型。一般意图的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用指定的类型。组件指定意图的目标组件的类名称。通常ANDROID会根据意图中包含的其它属性的信息,比如动作、数据/数据类型、类别进行查找,最终找到一个与之匹配的目标组件。附加信息是其它所有附加信息的集合。使用附加信息可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在附加信息里,传给电子邮件发送组件。总之,动作、数据/数据类型、类别和附加信息一起形成了一种语言。这种语言使系统能够理解诸如“查看某联系人的详细信息”之类的短语。随着应用不断的加入
35、到系统中,它们可以添加新的动作、数据/数据类型和类别来扩展这邢台学院2014届本科毕业设计9种语言。应用也可以提供自己的活动来处理已经存在的这样的“短语”,从而改变这些“短语”的行为。253ANDROID如何解析INTENT在应用中,可以以两种形式来使用INTENT1直接意图指定了组件属性的意图。通过指定具体的组件类,通知应用启动对应的组件。2间接意图没有指定组件属性的意图。这些意图需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件中,确定满足此意图的组件。对于直接意图,ANDROID不需要去做解析,因为目标组件已经很明确,ANDROID需要解析的是那些间接意图,通过解析,将意图映
36、射给可以处理此意图的活动、意图接收器或服务。意图解析机制主要是通过查找己注册在ANDROIDMANIFESTXML中的所有意图过滤器及其中定义的意图,最终找到匹配的意图。在这个解析过程中,ANDROID是通过意图的动作、数据类型、类别这三个属性来进行判断的,判断方法如下如果意图指明定了动作,则目标组件的意图过滤器的动作列表中就必须包含有这个动作,否则不能匹配。如果意图没有提供数据类型,系统将从数据中得到数据类型。和动作一样,目标组件的数据类型列表中必须包含意图的数据类型,否则不能匹配。如果意图中的数据不是CONTENT类型的URI,而且意图也没有明确指定它的数据类型,将根据意图中数据的格式比如
37、HTTP或者MAILTO进行匹配。同上,意图的格式必须出现在目标组件的格式列表中。如果意图指定了一个或多个类别,这些类别必须全部出现在组建的类别列表中。比如意图中包含了两个类别LAUNCHER_CATEGORY和ALTERNATIVEC_CATEGORY,解析得到的目标组件必须至少包含这两个类别。3系统需求31用户需求越来越复杂的医药名称及病情症状使得人们经常非常的苦恼,为了解决这些问题,在ANDROID这个平台上,设计开发一个用药安全相关知识查询系统。系统应该具有以下功能(1)对症找药收录专业的疾病描述及治疗方案,提供百万医生推荐的常用药品;(2)家庭药箱收藏家庭常用药品,根据家人服药情况,
38、智能提醒用药安全警示;(3)服药提醒给长辈设置服药提醒,再也不用担心家人忘记服药;(4)药品/保健食品收录生产厂家提供的药品、保健食品说明书,供平时家庭用药参考;邢台学院2014届本科毕业设计10(5)附近药店根据用户位置,智能提示周边药店信息,一个电话即可找到想买的药品并及时买到所需药品;(6)条码扫描通过扫描药品包装盒条形码,可快速查看相关药品、保健品使用说明及注意事项等。32系统设计的原则(1)实用性原则该原则主要体现的是所设计的系统能够解决实际问题,是所有应用系统设计最基本的最主要的原则,直接关系到系统成败。基于ANDROID手机用药安全知识信息查询系统可以随时为人们解决需要时的医药选
39、择问题,使用户方便的获取真正想要获得信息。(2)可靠性原则可靠性是系统设计的立足点,若设计的系统故障频繁,就不能满足用户的需求,设计的公交查询系统应该从以下几个方面提高其可靠性故障发生是应该给出提示,提示用户应该如何操作来排除故障;通过测试监测系统漏洞,完善系统。(3)易于更新和维护系统的设计能够实现有关空间数据和属性数据的实时更新和维护。在系统维护时只需在服务器上维护即可,数据的更新和维护要简单可行。(4)操作简单操作简单是软件设计过程中需要重视的问题,应该精心设计用户接口、使系统用户界面友好,便于用户理解。4ANDROID用药安全的设计与实现41系统体系结构手机客户端通过无线网与服务器连接
40、并请求数据。如图41所示图41通信示意图手机客户端INTERNET服务器邢台学院2014届本科毕业设计1142程序的文件结构和用途在程序开发阶段,首先确定“用药安全”的项目名为MEDICINE,据程序模块设计的内容,建立MEDICINE项目。MEDICINE项目源代码的结构如图42所示。为了使源代码文件的结构更加清晰,项目设置了多个命名空间,分别用来保存需用图片、数据库和工具实体的源代码文件,源代码文件的名称以及说明等。图42MEDICINE项目的源代码文件表41MEDICINE项目的文件用途说明包名称文件名说明COMEXAMPLEAMAPMEDICINEJAVA实现搜索周围药店功能COMEX
41、AMPLECONSTANTURLCONSTANTURLJAVA所有模块的URLCOMEXAMPLEDIALOGPROGRESSDLGUTILJAVA进度条显示的信息COMEXAMPLEFAMILAYMEDICINEADDFRAGEMENTJAVAADDITEMACTIVITYJAVADELETEFRAGMENTJAVAFAMILYMEDICINEACTIVITYJAVA实现添加家庭药箱,服药提醒及对其编辑的作用。COMEXAMPLEFAMILAYMEDICINEDBDBHELPERJAVADBMANAGERJAVAFAMILYMEDBEANJAVA数据库信息处理邢台学院2014届本科毕业设计1
42、2表41MEDICINE项目的文件用途说明ANDROID的资源文件保存在/RES的子目录中。其中/RES/LAYOUT目录中保存的是所有的布局文件,/RES/DRAWABLE/目录中保存的是图像文件,/RES/VALUES目录中保存的是用来自定义字符串和颜色的样式主题文件。所有在程序开发可以被调用的资源都保存在这些目录中。包名称文件名说明COMEXAMPLEMAINELERTALARMACTIVITYJAVAALERTDBHELPERJAVAALERTDETIALMANAGERJAVAMAINALERTJAVAMYRECEIVERJAVA具体实现服药提醒功能COMEXAMPLEUTILSDAT
43、ACLEARMANAGERJAVADRUGSASYNCTASKJAVAHTTPUTILSJAVAJSONUTILSJAVANETHELPERJAVANETWORKUTILSJAVASEARCHASYNCTASKJAVA实现网络连接和JSON解析的工具集COMEXAMPLEZXINGCAMERACAPTUREACTIVITYJAVA关于条形码扫描功能COMEXAMPLEZXINGDECODINGCAPTUREACTIVITYHANDLERJAVADECODEFORMATMANAGERJAVADECODEHANDLERJAVADECODETHREADJAVAINACTIVITYTIMERJAVAI
44、NTENTSJAVA条形码扫描中聚焦扫描功能的实现COMEXAMPLEZXINGVIEWVIEWFINDERRESULTPOINTCALLBACKJAVAVIEWFINDERVIEWJAVA条形码扫描信息的处理COMEXAMPLEVIEWAUTOFOCUSCALLBACKJAVACAMERACONFIGURATIONMANAGERJAVACAMERAMANAGERJAVAFLASHLIGHTMANAGERJAVAPLANARYUVLUMINANCESOURCEJAVAPREVIEWCALLBACKJAVA条形码扫描信息视图呈现邢台学院2014届本科毕业设计1343功能模块对照表表42MEDIC
45、INE功能模块表5详细设计51首页的实现在介绍MEDICINE的核心代码前,首先了解一下COMEXAMPLEMEDICINE中的MAINACTIVITYJAVA。MAINACTIVITYJAVA是程序的首界面代码。先声明了用到的组件,从代码中可以看出,MAINACTIVITY的主要功能就是所有功能模块的集合显示,使用的适配器是BASEADAPTER。(1)实现类MAINACTIVITY。(2)功能描述显示初始加载界面,将各个功能选项展示出来。(3)主要变量DRAWERLAYOUTDRAWERLAYOUT,左抽屉布局;LISTVIEWITEMLIST,列表控件,以列表形式显示数据;FRAGMEN
46、TMANAGERFRAGMGR,子窗口的管理;STRINGTITLES,要展示内容的标题数组。(4)主要函数及内部类ONCREATE方法,ACTIVITY的生命周期的创建方法,此方法在ACTIVITY初次创建时调用,并且每个ACTIVITY必须重写该方法,在此方法中创建视图、用HANDLER类处理消息队列;SETDRAWERLISTENER,左抽屉的事件监听,点击相关按钮出现左抽屉的界面,分别有设置、登录、关于三部分;ARRAYADAPTER,给LISTVIEW设置适配器对象;ONITEMCLICK,点击左抽屉中的某一项是的触发事件;ONPAUSE方法,生命周期中的方法,在此实现抽屉的关闭,返
47、回首页;ONKEYDOWN方法,实现双击按钮退出程序;SEARCH,搜索框。模块名称模块功能对症找药模块收录专业的疾病描述及治疗方案,提供百万医生推荐的常用药品。家庭药箱模块收藏家庭常用药品,根据家人服药情况,智能提醒用药安全警示。服药提醒模块在地图中查找指定位置,并标示出来。药品/保健食品模块给长辈设置服药提醒,再也不用担心家人忘记服药。公用数据下载模块收录生产厂家提供的药品、保健食品说明书,供家庭用药参考。附近药店查询模块根据用户位置,智能提示周边药店信息,一个电话即可找到想买的药品。条形码扫描功能模块通过扫描药品包装盒条形码,可快速查看相关药品保健品说明。邢台学院2014届本科毕业设计1
48、4首次使用此软件会有有一个各个功能组成的页面切换效果的实现。主要代码在STARTACTIVITYJAVA中,在此功能实现首次使用此软件中各个功能所组成的图片给的滑动界面切换使用的适配器是PAGERADAPTER,监听器为ONPAGECHANGELISTENER。且页面切换后能调到主界面。(1)实现类STARTACTIVITY。(2)功能描述是滑动页界面,使首次使用的用户对整个软件有直接的认识。(3)主要变量VIEWGROUPDOTGROUP,视图集;IMAGEVIEW,图片视图展示各个界面;VIEWPAGER,实现分页效果。(4)主要函数及内部类ONCREATE方法,大部分功能在此实现,如PA
49、GEVIEWSADD就是将每个滑动界面的图片所在布局添加进去,滑动页界面为MAINGROUP,使用的适配器为GUIDEADAPTER继承自PAGEADAPTER;声明一个事件监听类GUIDEPAGECHANGELISTENER实现ONPAGECHANGELISTENER接口,其中的ONPAGESELECTED中进行一个循环并判断是否否添一个DRAWABLE;最后通过JUMPMAINACTIVITY跳到主界面。52对症找药在COMEXAMPLEMEDICINE包中的代码是“保健食品”、“对症找药”、“搜索药品名”三项功能的主要实现以及左抽屉中三项功能的设置。实现“对症找药”功能组要用到的主要组件是LISTVIEW,因为要连接网络下载相关数据所以需要使用到异步任务ASYNCTASK和JSON解析,相关代码在都在COMEXAMPLEUTILS包中。(1)实现类DISEASELISTACTIVITY,DISEASEDETAILACTIVITY。(2)功能描述在首页中点开“对症找药”这一选项,可得到一个关于各种疾病的列表,在点开某一选项出现具体病症,再点开则出现疾病简介,药物治疗,推荐药物的相关知识。(3)主要变量PROGRESSDIALOG,进度条;TOPDRAWABLE,顶栏设计;LISTVIEW,病症列表;FINDLIST,FINDDR