随着“互联网+医疗”模式的应用和发展,“App+硬件+云端”逐渐成为移动医疗发展的主流趋势,越来越多的移动医疗App内置在手机中来借助传感器记录人体指标和收集数据,通过移动医疗App+智能穿戴设备为用户提供自动化的数据输人服务。这些数据为可以提供疾病诊断的智能诊断式移动医疗App的研发提供有力支撑,极大提高了医疗数据收集的准确性和便利性,在未来的医药健康领域必将发挥更重要的作用。
本文介绍了个人健康助理App的设计与实现。调研市场主流App,通过分析App功能以及界面的优缺点,结合现有资源和用户需求,设计出个人健康助理App的总体架构,在架构的基础上设计代码并实现,最后完成对App的测试工作。
系统需求分析
系统总体功能架构分析
个人健康助理系统在整体功能结构上将系统分为数据、主页、医生个人四个模块,详见图1。
数据模块:主要实现血压、血糖等数据的记录,包括手动输入和自动录入,将数据库中的数据以折线图形式直观地显示出来,以及计步功能。
主页模块:主要实现疾病和症状的搜索功能,健康资讯即科普类文章的推送,健康提醒功能可以设置闹钟提醒人们按时吃药或进行测量。
医生模块:实现私人医生咨询,用户可以按科室、地区、医院等查找医生,并可向医生咨询问题。
个人模块:实现了个人基本信息的获取,健康档案中可以查看最近一次的身体情况报告,在消息中心中可以查看向医生咨询记录。
系统功能性需求分析
经过调研发现,个人健康助理系统的用户可分为两类,分别是医生用户和普通用户。普通用户可查询个人健康助理各项功能,医生用户需要向普通用户提供咨询服务。
1.普通用户需求
普通用户通过系统可以完成对健康数据的管理,疾病搜索,向医生咨询,查看推送的资讯以及设置提醒事项。
2.医生用户需求
医生用户通过系统可以管理自己的个人信息,维护自己的用户列表。
系统性能需求分析
系统可用性:要求保证功能正常使用,所有通信均支持IPv6协议,界面符合逻辑,便于操作,页面最长响应时间不超过5秒。系统安全性:要求系统前后端提供密码加密措施;确保系统和个人信息的安全;基本的漏洞防范。
系统总体设计
系统总体技术架构设计
个人健康助理系统采用MVC架构,见图2。MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。其中M层处理数据,业务逻辑等;V层处理界面处理的结果;C层起桥梁作用,控制V层和M层通信来分离视图和业务逻辑。在Android中,对于模型层,我们针对业务模型,建立数据结构和相关的类,Model是与View无关,但和业务相关,比如对数据库的操作、对网络的请求都应该在Model里面处理;对于视图层,使用XML文件进行界面的描述;对于控制层,Activity和Fragment一般处理用户交互问题,它可以读取视图层的数据,并向模型层发送数据请求。
系统物理拓扑架构设计
个人健康助理系统中主要有手机客户端、检测设备、App后台服务器、环信服务器四类实体。其中检测设备通过蓝牙与手机客户端连接,将数据传输至手机,手机客户端通过Http协议与App后台服务和环信服务器相连,实现数据上传至服务器。图3为系统物理拓扑结构图。
系统设计与实现
系统流程
经过调研,结合项目需求与现有资源,本文设计出如下系统流程。首先,用户打开App进入登录页面,用户可根据需要登入或注册新用户;用户登入后进入主界面。主界面分为四个Tab,依次为数据,首页,医生和个人。在数据界面,可选择需要测量种类进行测量或记录,查看步数以及最近一次的测量数据。当点击某一项数据时,可以在新的页面显示更多该项数据以及它的图表;在首页界面,可以通过搜索框搜索疾病,查看健康资讯以及设置健康提醒;在医生界面,显示各个科室的列表,当点击具体科室可以显示此科室的医生列表,此外,还可以通过位置和排序方式进一步筛选列表中的医生,选中一位医生时,进入医生详情界面,在此界面可以查看医生详情以及咨询医生;在个人界面,可以对个人信息进行设置,填写健康档案信息、查看医生消息等。
登录模块
客户端安装运行后进入登录界面。未注册用户通过“注册”按钮进入注册界面,系统通过EditText获取用户名、密码后,上传至服务器,根据服务器的返回值来确定用户是否注册成功。已注册用户输入用户名密码,同样将用户名密码上传至服务器,根据服务器返回值提示是否登录成功。
IPv6协议支持
本系统涉及到通信部分有两种,一种是Android手机与服务器之间的通信,另一种是Android手机与检测设备之间的通信。对于前者,Android4.0版本以上的手机均支持IPv6,同时,还需要在与服务器通信的过程中使用IPv4/v6兼容API;对于后者,系统使用的蓝牙协议规范最低标准设置为蓝牙4.2标准。蓝牙4.2是蓝牙技术联盟于2014年12月推出的新的规范,提出了IPv6网络支持。
数据模块
数据模块包括血压、血糖等数据收集、存储和图形化展示。
数据收集包括手动输入数据和通过蓝牙连接设备自动录入数据。手动输入通过EditText获取已输入的数据,并判断数据的合理性;自动输入通过蓝牙连接设备,蓝牙连接的具体实现步骤如下:
首先检测终端是否支持蓝牙,并判断蓝牙是否可用。然后,自定义一个继承自Service并实现了BluetoothAdapter.LeScanCallback接口的BleService类,在BleService中实现BluetoothGattCallback()方法完成蓝牙连接后的回调。同时,使用Handler实现蓝牙线程与主线程之间的通信。接着,在主线程中通过bindService()方法启动BleService,分别通过BleService的MSG_REGISTER关键字注册蓝牙服务,MSG_START_SCAN关键字扫描蓝牙服务,最后通过MSG_DEVICE_CONNECT关键字连接蓝牙设备,实现设备的连接过程。
数据存储分为本地存储和服务器存储。本地存储使用Sqlite实现。Sqlite的实现过程如下:
首先,自定义一个继承自SQLiteOpenHelper的DbHelper类,通过实例化DbHelper类,获取数据库写权限,然后通过表名实现对数据库表的增删改查操作;服务器存储通过HttpClient类实现,首先对HttpClient类的实例设置Url和连接超时时间等参数,将数据封装在类型为NameValuePair的List中,然后通过HttpClient实例的execute()方法获取服务器响应,最后根据相应结果判断数据是否上传成功。
数据的图形化展示使用第三方库MPAndroidChart和helloCharts实现图表的绘制。
搜索
搜索功能主要使用贝叶斯网络(BayesNetwork)结构实现。贝叶斯网络是一种概率图型模型,借由有向无环图得知一组随机变量及其n组条件概率分配的性质。用贝叶斯网络来表示疾病和其相关症状之间的概率关系。
通过JSMILE建立一个已知结构的有向图,设置他们的初始概率以及条件概率,来构造一个由疾病、症状节点构成的贝叶斯网络,如图4所示。
图中的叶子节点表示症状,非叶子节点表示疾病,用箭头表示因果关系,在已知节点概率以及疾病对应症状条件概率的情况下,根据症状可以计算出某些潜在疾病的概率,供用户参考。
医生咨询
医生咨询,主要包括根据条件筛选医生与同医生的即时通讯功能。
医生的筛选通过选择位置、科室以及排序实现。当点击其中一个选项时,弹出一个由左右两个List组成的两级列表,以位置为例,左边列表显示省列表,右边列表显示市列表。根据选择的选项筛选出符合条件的医生,以列表的形式显示出来。
与医生的即时通讯通过第三方的即时通讯接口“环信”实现。消息通信的过程大致如图4所示。
用户之间的消息传递,首先发送到环信服务器,环信服务器可将消息直接送达目标用户。同时,App后台服务器处理消息回调并通过RESTAPI返回至环信服务器。RESTAPI是一种设计风格。由于前端设备层出不穷,包括手机、平板、桌面电脑、其他专用设备等,必须要有一种统一的机制,方便前端设备与后端进行通信。由此而产生了RESTAPI。
计步、资讯和闹铃
计步功能通过Service实现。在MainActivity中启动一个继承自Service类的StepService类,在StepService类中可以获取传感器的实例,通过传感器实例获取当时的步数。在计步界面中,我们通过一个线程每500ms向传感器请求更新一次数据,以期在计步界面实时更新计步数据。每次存在数据更新操作或在Activity的生命周期更替时,将计步数据更新至数据库。
资讯功能通过用户喜好对用户设置标签,服务器根据标签向用户推送相应的科普类文章。
闹铃功能通过四大组件之一的BroadcastReceiver实现。首选自定义一个类继承BroadcastReceiver类,并重写onReceive()函数,在onReceive()函数中实现触发闹铃后的效果。然后在闹铃界面完成闹铃的注册,最后通过AlarmManager设置广播延迟的时间。当广播发出后触发onReceive()函数从而达到闹铃提醒的效果。
个人信息
在健康档案界面,收集个人资料、生活习惯及健康记录等信息,当用户填写完成后,通过SharedPreference保存到本地,并上传至服务器。在消息中心界面可以查看同医生通信的记录。
总结
个人健康助理系统能够管理自身的健康,达到健康助理的效果。在功能上,App实现数据的记录及查询,使用户随时随地了解自身的健康状态,医生咨询功能使用户在有疑虑时得到专业的解答,同时实现了症状-疾病的搜索,并以概率形式展示出来,使用户了解可能会发生的疾病及其概率,这也是本项目的一个创新点。项目的不足之处在于,现在没有足够的医生资源和疾病数据,在医生咨询和搜索模块没有完整的实现。总的来说,个人健康助理系统能够促进个人的健康,提高人们的健康意识,有着良好的应用前景。
(作者单位南京大学计算机科学与技术系)
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。