毕业设计(论文)-基于Android的用药安全客户端的开发.doc_第1页
毕业设计(论文)-基于Android的用药安全客户端的开发.doc_第2页
毕业设计(论文)-基于Android的用药安全客户端的开发.doc_第3页
毕业设计(论文)-基于Android的用药安全客户端的开发.doc_第4页
毕业设计(论文)-基于Android的用药安全客户端的开发.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

邢台学院2014届本科毕业设计本科毕业设计题目:基于Android的用药安全客户端的开发姓 名:学 号:2010A21219院(系、部):数学与信息技术学院专 业:网络工程班 级:2010级3班指导教师:完成时间: 2014 年 4 月摘 要对用药安全客户端的具体实现的技术进行了分析,主要是SQLite数据库技术的使用、JSON数据的解析、使用Http协议的Post请求的网络数据的下载,由Android四大基本组件Activity、Service、BroadCast、ContentProvider、以及Intent和Fragment配合完成。用药安全客户端软件运行于Android平台,提供对症找药、服药安全警示、家庭药箱、药品/保健食品信息查询、附近药店等功能。用药安全客户端包含的主要组件有欢迎界面、侧边栏Drawer、ActionBar、ListView图文混排、ViewPagerIndicator和ViewPager分页效果实现、GridView、Spinner、地图、搜索、Camera等。家庭药箱和服药安全警示,主要由数据库SQLiteOpenHelper、通知Notification、广播BroadcastReceiver等技术的实现。而对症找药和保健食品则主要用到JSON数据解析、AsyncTask异步任务、ListView图文混排、Activity之间数据传递等技术实现。关键词:用药安全、Android;SQLite;JSONAbstract For drug safety client specific implementation technology were analyzed, and the main was the use of SQLite database technology,parsing the JSON data, using the Http Post request network data download, the Activity by the Android four basic components, services, BroadCast, ContentProvider, and Intent and fragments to cooperated to complete.Drug safety client software running on the Android platform, to provide find drugs according to Symptoms of illness, medication safety warning, family medicine, medical/health care food information query, near a pharmacy, and the other functions.Drug safety client contains the main components were welcome screen, the sidebar Drawer, ActionBar, ListView by mixed, ViewPagerIndicator and ViewPager paging effect implementation, the GridView, Spinner, maps, search, Camera, etc.Family medicine cabinet and medication safety warning, mainly used the database SQLiteOpenHelper, notifications, the implementation of the Notification, radio BroadcastReceiver and other technology.While symptomatic for medicine and health food mainly used the JSON data parsing, AsyncTask asynchronous tasks, ListView by mixed, the data transmission between the Activity and other technical implementating.Keywords:Medication Safety;Android;SQLite;JSON dataV目 录1前 言12 关键技术概述12.1 Android操作系统分析12.1.1 Android分析12.1.2 Android架构12.2 SQLite分析22.3 Android布局管理器32.4 Android四大基本组件32.4.1 关于Activity32.4.2 关于Service服务62.4.3 关于ContentProvider内容提供者72.4.4 关于BroadcastReceiver广播接收器72.5 Intent的详细解析82.5.1 Intent分析82.5.2 Intent的抽象描述82.5.3 Android如何解析Intent93 系统需求93.1 用户需求93.2 系统设计的原则104 Android用药安全的设计与实现114.1 系统体系结构114.2 程序的文件结构和用途114.3 功能模块对照表135 详细设计135.1 首页的实现135.2 对症找药145.3 保健食品145.4 搜索药品名155.5 左抽屉155.6 家庭药箱165.7 服药提醒165.8 附近药店175.9 条码扫描176 用药安全的运行测试186.1 系统环境的搭建186.2 软件的运行测试18总 结22参 考 文 献23谢 辞241前 言用药安全是一款侧重于家庭用药安全以及平时医疗保健的用药安全客户端软件,提供全面的常用药品使用信息,具有实用性、便利性、多样性。通过此软件可以查看病症,查找用药方案,方便用户平时生活,节约看诊时间,减轻普通病看诊消费的经济压力。本设计的任务是基于Android平台,完成用药安全客户端的设计与实现。本文将分析对基于Android平台开发用药安全客户端的具体实现的技术,报告完成用药安全客户端的设计与实现的实践成果。2 关键技术概述2.1 Android操作系统分析2.1.1 Android分析Android是Google在2007年11月宣布的基于Linux平台的开源手机操作系统的名称,而在Android系统底层方面,Android使用C/C+作为开发语言8。该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的解决方案。Android系统就是一个开发式的手机和平台电脑操作系统9,早期由Google开发,后由开放手机联盟开发1。它提供了从底层操作系统到上层的程序界面的所有软件,使用这个平台无需缴纳任何的授权许可费用,同时不同的厂商还可以根据自身的需求修改和扩展Android平台。在Android平台下,除了应用程序运行的载体虚拟机之外,所有的Android应用程序之间是完全平等的。所有的应用程序都运行在虚拟机上面,虚拟机提供了一系列用于应用程序和硬件资源间通信的API。Android打破了应用程序之间的界限,在Android平台下开发应用程序,可以很方便的实现应用程序之间的数据共享。一个应用程序不但可以通过API访问系统提供的功能,还可以通过申明自身的功能供其他应用程序调用2。Android为开发人员提供了大量的使用库和工具,使得开发人员可以快速地创建自己的应用程序。例如Android将著名的Google Map集成进来,开发人员通过简单的几行代码就可以快速的开发出基于地图的应用。2.1.2 Android架构图2-1显示的是Android操作系统的主要组件。Android同一个核心应用程序包一起发布,该应用程序包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用Java编写的。Android应用程序框架即开发者也完全可以访问核心应用程序使用的API框架。该应用程序架构用来简化组件软件的重用:任何一个应用程序都可以发布它的功能模块并且任何其他的应用程序都可以使用其所发布的功能模块(不过得遵循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。图2-1 Android系统架构图2.2 SQLite分析SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。Android在运行时(run-time)集成了SQLite,所以每个Android应用程序都可以使用SQLite数据库。SQLite支持多数SQL92标准,很多常用的SQL命令都能在SQLite上面使用,除此之外Android还提供了一系列自定义的方法去简化对SQLite数据库的操作3。SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。SQLite和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在CREATE TABLE语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite将检查它的类型。如果该类型与关联的列不匹配,则SQLite会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储4。2.3 Android布局管理器Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以唯一的该系统主要用到的布局有线性布局,帧布局和相对位置布局。(1)LinearLayout类线性布局是最简单的布局之一。android:orientation可以设置线性布局的朝向,可以是水平(horizontal)或者垂直(vertical)两种排列方式。同时使用android:gravity设置控件的对齐方式,还可以通过设置控件的weight参数控制各个控件在容器中的相对大小。(2)FrameLayout类FrameLayout帧布局在屏幕上开辟出了一块区域,在这块区域上可以添加多个子控件,但是所有的子控件都被对齐到屏幕的左上角。帧布局的大小由子控件尺寸最大的那个子控件来决定。如果子控件一样大,同一时刻只能看到最上面的子控件,因为在FrameLayout中,子控件是通过栈来绘制的5。(3)RelativeLayout类RelativeLayout相对位置布局,即子控件的位置可以取决于兄弟控件或父控件的位置,与Linearlayout相比,可以减少嵌套,避免生成不要的对象,代码简洁,是本程序中主要使用的布局。2.4 Android四大基本组件Android四大基本组件分别是Activity,Service服务,ContentProvider内容提供者,BroadcastReceiver广播接收器。2.4.1 关于ActivityActivity是android最常用的组件,是应用程序的表示层,Activity一般通过View来实现应用程序的用户界面,相当于一个屏幕,用户与程序的交互是通过该类实现的。Activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上,当activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的activity,使用ActivityGroup6。Android平台是个手机作业系统。撇掉其他功能不谈,手机的特性,就是应该能随时在未完成目前动作的时候,暂停正在使用的功能,切换到接电话、接收短信模式,而且在接完电话回到应用程序时,还希望能看到一样的内容。现在用户使用智能手机,大多已习惯使用多工的作业系统(如windowsMobile),可以在用手机听音乐的同时,执行其他多个程序。同时执行多个程序有它的明显好处,但也有它的缺点。每多执行一个应用程序,就会多耗费一些系统内存,而手机里的内存是相当有限的。当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统运行时就会觉得越来越慢,甚至不稳定。为了解决这个问题,Android引入了一个新的机制生命周期。Android应用程序的生命周期是由Android框架进行管理,而不是由应用程序直接控制。通常,每一个应用程序(入口一般会是一个活动的onCreate方法),都会占据一个进程。当系统内存即将不足的时候,会依照优先级自动进行进程的回收。不管是使用者或开发者,都无法确定应用程序何时会被回收。关于进程的生命周期将在下一节中介绍,本节主要介绍活动的生命周期。一个活动类别除了OnCreate方法之外,还预先定义了onPause(暂停)、OnResume(继续)等的基本方法,当从一个活动切换到另一个活动的时候,原来的活动将经过一连串的状态改变。开发者可以在程序中添加一些各状态相对应的流程,每次活动状态改变时,就会执行相对应的流程。要让用户有好的使用体验,活动需要在各个周期中负责保管状态、恢复状态、传送资料等工作。Android的虚拟机是使用堆栈管理。主要有四种状态:(1)活动状态活动状态是指用户启动应用程序或活动后,活动运行中的状态。在Android平台上,同一个时刻只会有一个活动处于活动或运行状态。其他的活动都处于未启动、停止或是暂停的状态。(2)暂停状态暂停状态是指当活动暂时暗下来,退到背景画面的状态。当警告对话框或电话来了时,都会让原来运行的活动退到背景画面。新出现的警告对话框等界面元件盖住了原来的活动画面。活动处在暂停状态时,用户无法与原活动互动。(3)停止状态停止状态是指有其他活动正在执行,而这个活动己经离开屏幕,不再动作的状态。通过按返回键,可以调出所有处于停止状态的应用程序列表。处于停止状态的活动,还可以通过通知来唤醒。(4)已回收或未启动状态已回收或未启动状态是指活动尚未被启动、已经被手动终止或己经被系统回收的状态。要手动终止活动,可以在程序中调用finish方法。如果是被系统回收,可能是因为内存不足了,所以系统根据内存不足时的回收规则,将处于停止状态的活动所占用的内存回收。图2-2所示的七个状态又可以归纳成三组:(1)资源分配(创建/销毁)完整的活动生命周期由创建状态开始,由销毁状态结束。创建时分配资源,销毁时释放资源。(2)可见与不可见(启动/重新启动/停止)当活动运行到启动状态时,就可以在屏幕上看到这个活动。相反地,当活动运行到停止状态时,这个活动就会从屏幕上消失。当用户按下返回键回到上一个活动时,会先到重新启动状态,再到一般的启动状态。(3)用户取得屏幕的控制权(继续/暂停)当有个警告对话框、短信、电话等信息进入时,原来的活动会进入暂停状态,暂时放弃屏幕的控制权,被中断到背景去,将前景交给优先级高的事件。当这些优先级高的事件处理完后,活动就改进入继续状态,此时又取得屏幕的控制权。图2-2 Activity生命周期由实际运行来看,我们可以归纳出所有Android应用程序都遵循的运作流程:(1)一般启动启动一个活动的基本流程为onCreateonstartonResume。该流程首先分配资源给这个活动(创建状态),然后将活动的内容显示到屏幕上(启动状态);在一切就绪后,取得屏幕的控制权(恢复状态),用户可以开始使用这个程序。(2)调用另一个活动调用另一个活动的基本流程为onause(1)onCreate(2)onstart(2)0nResume(2)onStop(1)。该流程首先冻结原来的活动,再交出屏幕控制权;直到活动2完成一般启动流程后,活动1才会被停止。(3)回到原来活动回到原来活动的基本流程为onPause(2)onRestart(1)onstart(1)onResume(1)onstop(2)onDestroy(2)。另外按返回键也可以回到原来的活动。(4)退出结束退出结束的基本流程为onPauseonStoponDestroy。如果程序中有直接调用finish方法来关闭活动的话,系统会跳过先冻结的阶段,直接暂停,停止,然后销毁。(5)回收后再启动回收后再启动的基本流程为oncreateonstartonresume。如果被回收掉的活动一旦又重新被调用时,会像一般启动一样再次调用活动的onCreate方法。当在模拟器上已经执行过多个应用程序,只要按下返回键,就会开启最近一次开启过的活动。所以如果要让再次被创建的活动跟原来开启过的一样,那么在活动之间切换时,就要保存资料:即在每次活动运行到暂停或停止状态时先保存资料,然后在创建时将资料读出来。2.4.2 关于Service服务一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个 activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐 应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。Service使用步骤如下:继承service类;AndroidManifast.xml配置清单文件中节点里对服务进行配置;服务不能自己运行,需要通过Contex.startService()或Contex.bindService()启动服务。通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行想停止服务要调用 Context.stopService(),此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()onStart(),如果服务已经启动再次调用只会触发onStart()方法使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()onBind(),如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务onUnbind()onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()onDestory()。2.4.3 关于ContentProvider内容提供者Content Provider,即内容提供商或者内容提供器。再具体解释就是:CP是移动数据业务内容提供商,或者叫移动增值业务内容提供商。Content Provider认证,即CP认证,指允许内容提供商提供内容。(如腾讯CP认证允许QCC商家提供QCC虚拟服务内容并自行销售。)Android中的Content provider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的方式之一,还有文件,sharePreference,SQLite数据 库等方式存储共享数据库,但是ContentPrivider更好的提供了数据共享接口的统一性。在android系统中,没有一个公共的内存区域,供多个应用共享存储数据。Android提供了一些主要数据类型的Content provider,比如音频、视频、图片和私人通讯录等。可在vider包下面找到一些android提供的Content provider。可以获得这些Content provider,查询它们包含的数据,当然前提是已获得适当的读取权限。总的一句:内容提供器是应用程序之间共享数据的接口,Android系统将这种机制应用到方方面面。比如:联系人提供器专为不同应用程序提供联系人数据;设置提供器专为不同应用程序提供系统配置信息,包括内置的设置应用程序等。2.4.4 关于BroadcastReceiver广播接收器广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行广播比如说,通知其它应用程序一些数据下载完成并处于可用状态。应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver基类。广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。BroadcastReceiver事件分类:系统广播事件,比如:ACTION_BOOT_COMPLETED(系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。用户自定义的广播事件有以下几种:注册广播事件:注册方式有两种,一种是静态注册,就是在AndroidManifest.xml文件中定义,注册的广播接收器必须要继承BroadcastReceiver类;另一种是动态注册,是在程序中使用Context.registerReceiver注册,注册的广播接收器相当于一个匿名类。两种方式都需要IntentFIlter。发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。2.5 Intent的详细解析2.5.1 Intent分析所谓Intent,就是一种运行时的绑定机制,在应用程序运行时连接两个不同的组件。一般的应用是通过Intent向android系统发出某种情求或者意愿,然后android系统会到根据请求查询各个组件声明的IntentFilter,找到需要的组件并运行它。Activity、Service和BroadcastReceiver,他们都是通过Intent机制激活的,不同类型的组件有传递Intent的不同方式7。而本系统中就是要激活一个新的Activity,可以通过调用Context.startActivity()方法。这个方法需要传入的Intent参数也称为Activity Action Intent(活动行为意图),为了能够使用该方法,所有的activity类都必须在AndroidManifest.xml文件中定义有相关的“activity”项。然后根据Intent对象对目标Activity描述的不同,来启动与之相匹配的Activity或者传递信息。2.5.2 Intent的抽象描述在Android参考文档中,对意图的定义是执行某操作的一个抽象描述。该抽象描述的具体内容如下:首先,它是要执行的动作的一个简要描述,如查看、修改等,Android定义了一套标准动作。此外,还可以根据应用的需要,定义自己的动作,并可定义相应的活动来处理自定义的动作。其次,是执行动作要操作的数据,Android采用指向数据的一个URI方式来实现。另外,除了动作和数据这两个重要属性外,还有一些附加属性:类别:被执行动作的附加信息。例如LAUNCHER_CATEGORY表示意图的接受者应该在Launcher中作为顶级应用出现;而ALTERNATIVECATEGORY表示当前的意图是一系列的可选动作中的一个,这些动作可以在同一个数据上执行。数据类型:显式指定意图的数据类型。一般意图的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用指定的类型。组件:指定意图的目标组件的类名称。通常Android会根据意图中包含的其它属性的信息,比如动作、数据/数据类型、类别进行查找,最终找到一个与之匹配的目标组件。附加信息:是其它所有附加信息的集合。使用附加信息可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在附加信息里,传给电子邮件发送组件。总之,动作、数据/数据类型、类别和附加信息一起形成了一种语言。这种语言使系统能够理解诸如“查看某联系人的详细信息”之类的短语。随着应用不断的加入到系统中,它们可以添加新的动作、数据/数据类型和类别来扩展这种语言。应用也可以提供自己的活动来处理已经存在的这样的“短语”,从而改变这些“短语”的行为。2.5.3 Android如何解析Intent在应用中,可以以两种形式来使用Intent:(1)直接意图:指定了组件属性的意图。通过指定具体的组件类,通知应用启动对应的组件。(2)间接意图:没有指定组件属性的意图。这些意图需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件中,确定满足此意图的组件。对于直接意图,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些间接意图,通过解析,将意图映射给可以处理此意图的活动、意图接收器或服务。意图解析机制主要是通过查找己注册在AndroidManifest.xml中的所有意图过滤器及其中定义的意图,最终找到匹配的意图。在这个解析过程中,Android是通过意图的动作、数据类型、类别这三个属性来进行判断的,判断方法如下:如果意图指明定了动作,则目标组件的意图过滤器的动作列表中就必须包含有这个动作,否则不能匹配。如果意图没有提供数据类型,系统将从数据中得到数据类型。和动作一样,目标组件的数据类型列表中必须包含意图的数据类型,否则不能匹配。如果意图中的数据不是content:类型的URI,而且意图也没有明确指定它的数据类型,将根据意图中数据的格式(比如http:或者mailto:)进行匹配。同上,意图的格式必须出现在目标组件的格式列表中。如果意图指定了一个或多个类别,这些类别必须全部出现在组建的类别列表中。比如意图中包含了两个类别:LAUNCHER_CATEGORY和ALTERNATIVEC_CATEGORY,解析得到的目标组件必须至少包含这两个类别。3 系统需求3.1 用户需求越来越复杂的医药名称及病情症状使得人们经常非常的苦恼,为了解决这些问题,在Android这个平台上,设计开发一个用药安全相关知识查询系统。系统应该具有以下功能:(1) 对症找药:收录专业的疾病描述及治疗方案,提供百万医生推荐的常用药品;(2) 家庭药箱:收藏家庭常用药品,根据家人服药情况,智能提醒用药安全警示;(3) 服药提醒:给长辈设置服药提醒,再也不用担心家人忘记服药;(4) 药品/保健食品:收录生产厂家提供的药品、保健食品说明书,供平时家庭用药参考;(5) 附近药店:根据用户位置,智能提示周边药店信息,一个电话即可找到想买的药品并及时买到所需药品;(6) 条码扫描:通过扫描药品包装盒条形码,可快速查看相关药品、保健品使用说明及注意事项等。3.2 系统设计的原则(1)实用性原则该原则主要体现的是所设计的系统能够解决实际问题,是所有应用系统设计最基本的最主要的原则,直接关系到系统成败。基于Android手机用药安全知识信息查询系统可以随时为人们解决需要时的医药选择问题,使用户方便的获取真正想要获得信息。(2)可靠性原则可靠性是系统设计的立足点,若设计的系统故障频繁,就不能满足用户的需求,设计的公交查询系统应该从以下几个方面提高其可靠性:故障发生是应该给出提示,提示用户应该如何操作来排除故障;通过测试监测系统漏洞,完善系统。(3)易于更新和维护系统的设计能够实现有关空间数据和属性数据的实时更新和维护。在系统维护时只需在服务器上维护即可,数据的更新和维护要简单可行。(4)操作简单操作简单是软件设计过程中需要重视的问题,应该精心设计用户接口、使系统用户界面友好,便于用户理解。4 Android用药安全的设计与实现4.1 系统体系结构手机客户端通过无线网与服务器连接并请求数据。如图4-1所示:手机客户端Internet服务器图4-1 通信示意图4.2 程序的文件结构和用途在程序开发阶段,首先确定“用药安全”的项目名为Medicine,据程序模块设计的内容,建立Medicine项目。Medicine项目源代码的结构如图4-2所示。为了使源代码文件的结构更加清晰,项目设置了多个命名空间,分别用来保存需用图片、数据库和工具实体的源代码文件,源代码文件的名称以及说明等。图4-2 Medicine项目的源代码文件表4.1 Medicine项目的文件用途说明包 名 称文 件 名说 明com.example.amapMedicine.java实现搜索周围药店功能com.example.constantUrlConstantUrl.java所有模块的Urlcom.example.dialogProgressDlgUtil.java进度条显示的信息com.example.familaymedicineAddFragement.javaAddItemActivity.javaDeleteFragment.javaFamilyMedicineActivity.java实现添加家庭药箱,服药提醒及对其编辑的作用。com.example.familaymedicine.dbDBHelper.javaDBManager.javaFamilyMedBean.java数据库信息处理表4.1 Medicine项目的文件用途说明()包 名 称文 件 名说 明com.example.mainelertAlarmActivity.javaAlertDBHelper.javaAlertDetialManager.javaMainAlert.javaMyReceiver.java具体实现服药提醒功能com.example.utilsDataClearManager.javaDrugsAsyncTask.javaHttpUtils.javaJsonUtils.javaNetHelper.javaNetworkUtils.javaSearchAsyncTask.java实现网络连接和JSON解析的工具集com.example.zxing.cameraCaptureActivity.java关于条形码扫描功能com.example.zxing.decodingCaptureActivityHandler.javaDecodeFormatManager.javaDecodeHandler.javaDecodeThread.javaInactivityTimer.javaIntents.java条形码扫描中聚焦扫描功能的实现com.example.zxing.viewViewfinderResultPointCallback.javaViewfinderView.java条形码扫描信息的处理com.example.viewAutoFocusCallback.javaCameraConfigurationManager.javaCameraManager.javaFlashlightManager.javaPlanarYUVLuminanceSource.javaPreviewCallback.java条形码扫描信息视图呈现Android的资源文件保存在/res的子目录中。其中/res/layout目录中保存的是所有的布局文件,/res/drawable/目录中保存的是图像文件,/res/values目录中保存的是用来自定义字符串和颜色的样式主题文件。所有在程序开发可以被调用的资源都保存在这些目录中。4.3 功能模块对照表表4.2 Medicine 功能模块表模块名称模块功能对症找药模块收录专业的疾病描述及治疗方案,提供百万医生推荐的常用药品。家庭药箱模块收藏家庭常用药品,根据家人服药情况,智能提醒用药安全警示。服药提醒模块在地图中查找指定位置,并标示出来。药品/保健食品模块给长辈设置服药提醒,再也不用担心家人忘记服药。公用数据下载模块收录生产厂家提供的药品、保健食品说明书,供家庭用药参考。附近药店查询模块根据用户位置,智能提示周边药店信息,一个电话即可找到想买的药品。条形码扫描功能模块通过扫描药品包装盒条形码,可快速查看相关药品保健品说明。5 详细设计5.1 首页的实现在介绍Medicine的核心代码前,首先了解一下com.example.medicine中的MainActivity.java。MainActivity.java是程序的首界面代码。先声明了用到的组件,从代码中可以看出,MainActivity的主要功能就是所有功能模块的集合显示,使用的适配器是BaseAdapter。(1)实现类:MainActivity。(2)功能描述:显示初始加载界面,将各个功能选项展示出来。(3)主要变量:DrawerLayout drawerLayout,左抽屉布局;ListView itemList,列表控件,以列表形式显示数据;FragmentManager fragMgr,子窗口的管理;String titles,要展示内容的标题数组。(4)主要函数及内部类:onCreate方法,Activity的生命周期的创建方法,此方法在Activity初次创建时调用,并且每个Activity必须重写该方法,在此方法中创建视图、用Handler类处理消息队列;setDrawerListener,左抽屉的事件监听,点击相关按钮出现左抽屉的界面,分别有设置、登录、关于三部分;ArrayAdapter,给ListView设置适配器对象;onItemClick,点击左抽屉中的某一项是的触发事件;onPause方法,生命周期中的方法,在此实现抽屉的关闭,返回首页;onKeyDown方法,实现双击按钮退出程序;search,搜索框。首次使用此软件会有有一个各个功能组成的页面切换效果的实现。主要代码在StartActivity.java中,在此功能实现首次使用此软件中各个功能所组成的图片给的滑动界面切换使用的适配器是PagerAdapter,监听器为OnPageChangeListener。且页面切换后能调到主界面。(1) 实现类:StartActivity。(2) 功能描述:是滑动页界面,使首次使用的用户对整个软件有直接的认识。(3)主要变量:ViewGroup dotGroup,视图集;ImageView,图片视图展示各个界面;ViewPager,实现分页效果。(4)主要函数及内部类:onCreate方法,大部分功能在此实现,如pageViews.add()就是将每个滑动界面的图片所在布局添加进去,滑动页界面为mainGroup,使用的适配器为GuideAdapter继承自PageAdapter;声明一个事件监听类GuidePageChangeListener实现OnPageChangeListener接口,其中的onPageSelected中进行一个循环并判断是否否添一个drawable;最后通过jumpMainActivity跳到主界面。5.2 对症找药在com.example.medicine包中的代码是“保健食品”、“对症找药”、“搜索药品名”三项功能的主要实现以及左抽屉中三项功能的设置。实现“对症找药”功能组要用到的主要组件是ListView,因为要连接网络下载相关数据所以需要使用到异步任务AsyncTask和Json解析,相关代码在都在com.example.utils包中。(1)实现类:DiseaseListActivity,DiseaseDetailActivity。(2)功能描述:在首页中点开“对症找药”这一选项,可得到一个关于各种疾病的列表,在点开某一选项出现具体病症,再点开则出现疾病简介,药物治疗,推荐药物的相关知识。(3)主要变量:ProgressDialog,进度条;topDrawable,顶栏设计;ListView,病症列表;findList,findDrugs,要找的药物列表和类;MyHandler,消息处理对列;DiseaseAdapter,关于疾病的相关数据的适配器。(4)主要函数及内部类:MyHandler继承自Handler类,处理findDrugs,findList,adapter,listView等关键变量的相关信息;onCreate方法中实现一个通知和数据加载的dialog,实现顶栏设计;onItemClickd点击事件,点击某一项是获取对应信息。还需要utils包中各种工具类,诸如DrugsAsyncTask,HttpUtils,NetworkUtils等的调用。5.3 保健食品实现“保健食品”功能组要用到的主要组件也是ListView,因为要连接网络下载相关数据所以需要使用到异步任务AsyncTask和Json解析,相关代码在也都在com.example.utils包中。“保健食品”所实现的的功能与“对症找药”类似,只是网络下载数据不同。(1)实现类:HealthFoodActivity,HealthFoodDetail,HealthMedicineActivity。(2)功能描述:在首页点开“保健食品”选项是首先出现各种疾病症状,再点开对应症状,出现治疗相关症状的药品和食品,再点开某一确定药品或食品选项则展开其详细信息。(3)主要变量:ProgressDialog,进度条;topDrawable,顶栏设计;ListView,病症列表;findList,healthyFood,要找的保健食品名称列表和类;MyHandler,消息处理对列;DiseaseAdapter,关于某药品可治疗疾病的相关数据的适配器。(4)主要函数和内部类:MyHandler继承自Handler类,处理healthFood,findList,adapter,listView等关键变量的相关信息;onCreate方法中实现一个通知和数据加载的进度条,实现顶栏设计;onItemClickd点击事件,点击可获取所需信息。还需要utils包中各种工具类,诸如DrugsAsyncTask,HttpUtils,NetworkUtils等的调用。其所有方法与对症找药功能的实现方法类似。5.4 搜索药品名实现“搜索药品名”功能只要在EditText输入栏中输入药品名字的首字母缩写就能查找相关药品,找到药品后点击药品名要列出药品的价格,商用名,通用名,英文名,成分,适应症状,用法用量,不良反应,禁忌,注意事项,药物相互做用这些内容。(1)实现类:MainSearchActivity,SearchDetail,SearchAsyncTask。(2)功能描述:在首页的一个EditeText输入框点击后可进入药品搜索界面,输入相关信息后即可查询所需信息。(3)主要变量:listJson,Json数据的列表;chooseEdit,输入搜索内容的输入框;ImageButton,图文组成的按钮;SearchAdapter,搜索信息数据的适配器;MyHandler,消息处理队列;diaolog,进度条。(4)主要函数和内部类:MyHandler继承自Handler类,处理searchMedicine,SearchDatat,adapter,listView等关键变量的相关信息;onCreate方法中实现一个通知和数据加载的进度条,searchbtn的事件监听,通过匿名内部类实现点击搜索功能;onItemClickd点击事件,listView的选项点击事件,点击可获取所需信息;还需要utils包中各种工具类,诸如SearchAsyncTask,HttpUtils,NetworkUtils等的调用。5.5 左抽屉实现使用程序左抽屉的代码主要在LeftDrawer.java,LoginActivity.java,SettingActivity.java,AboutActivity.java中,左抽屉有座为一个菜单Menu有三个选项即“设置”“登录”“关于”分别和SettingActivity,LoginActivity,AboutActivity对应,“设置”对应版本更行功能,“登录”是一个用户注册页面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论