基于Android的远程医疗监测系统设计*

2015-09-21 01:30张红北赵晓军王晨康
网络安全与数据管理 2015年19期
关键词:服务器端蓝牙生理

张红北,赵晓军,李 瑞,王晨康,绳 丹

(河北大学 电子信息工程学院,河北 保定 071002)

0 引言

随着社会的进步,人民生活水平的提高,人们越来越关注自身的身体健康。人们都希望可以足不出户享受来自医院及医生的诊疗或是根据自身的指标得到针对性的健康指导。对于一些慢性病患者及时将重要的生理参数告知医生可以防止病情的突然恶化。在西方一些发达国家,远程诊疗技术已经应用于实际生活,患者在当地就可以享受到千里之外的专家提供的治疗服务[1]。

另一方面,智能移动终端的普及与移动网络的发展使得远程医疗成为可能。智能终端如智能手机、PAD等,其强大的功能可以实现远程医疗中医疗数据的输入、输出、显示和本地存储等。常见的智能终端操作系统有Android、iOS、kindle等,相比于其他系统,Android基于Linux内核,具有开放性和免费性的特点。现有的远程医疗信息系统主要依赖医生通过客户端主动访问服务器获取病人信息,无法保证信息的实时性,在面对突发事件时无法及时处理。在此背景下,本文结合现有医疗信息系统与Android操作系统的特点对Android远程医疗信息系统的应用以及相关技术进行研究。

1 远程医疗信息系统的整体框架

系统的第一部分是用户生理参数的采集。用户使用便携式医疗设备对心率、血压等生理数据进行采集,并通过蓝牙模块将采集到的数据发送到移动设备端。移动设备主要是安装Android操作系统的智能手机和平板电脑,移动端应用程序需要完成两项功能,一是接收便携式医疗设备采集的数据并进行本地显示与存储,二是应用程序连接到服务器,将所接收的数据发送出去同时准备接收服务器端的推送。服务器端接收信息并存入数据库中,同时配有前台网页以便用户查询。此外通过消息代理服务器通过订阅/发布的形式向客户端推送患者数据异常的消息或根据患者病史提供医嘱。其总体结构如图1所示。

图1 远程医疗监测系统的总体结构图

2 远程医疗系统Android应用的设计与介绍

2.1 Android平台简介

Android是由Google以及Google牵头的开放手机联盟于2007年11月5日推出的一款开源智能手机操作系统[2]。并且,Google采取 Apache免费开源许可证的授权方式,发布了Android操作系统的源代码,以便各手机生产商推出基于Android操作系统的智能手机,Android操作系统后来更是逐渐拓展到平板电脑及其他领域上[3]。Android系统架构由5部分组成,分别是Linux内核(Linux Kernel)、系统运行层(Android Runtime)、函数库(Libraries)、 应 用 框 架 (Application Framework) 和 应 用 层(Applications)。应用层主要包括电话程序、SMS短消息程序、浏览器程序等为用户提供手机基本功能的软件集合。应用框架层不直接与用户接触,主要面向Android开发人员,开发人员可以调用应用框架提供的各种API,方便对应用程序的开发。函数库包含常用的C/C++库,如 Surface Manager、OpenGL ES、SGL、SSL、SQLite 等。 系统运行层可分为Android核心函数库与虚拟机,为应用程序提供运行环境。Linux核心为Android提供主要的系统服务如安全性管理、内存管理、网络栈、驱动模型、电源管理等[4]。

2.2 Android的数据采集

随着人们生活水平的不断提高,人们对自身的健康也越来越关注。定期体检获取自身生理数据、及时改变生活习惯可以有效地避免疾病的发生。传统体检需要人们到医院或者社区医疗中心,由于路途遥远设备资源有限势必造成大量的时间浪费。便携式医疗设备的出现极大地改变了这种现状,人们可以随时随地采集自身的生理数据同时避免了路途遥远和排队带来的困扰。

市场上现有的便携医疗设备很多都带有蓝牙功能,而Android SDK中提供了用于蓝牙通信的标准API,使得通过Android移动端设备获取便携式医疗设备上采集的信息成为可能。Android蓝牙通信主要使用BluetoothAdapter类,它提供了对于蓝牙操作的各种方法。要使用蓝牙首先要在AndroidManifest.xml中加入权限:

在具体操作时首先使用enable方法打开蓝牙,之后使用startDiscovery对附近的蓝牙设备进行搜索。使用系统广播的方式将设备信息加入设备列表,由于整个扫描过程需要12 s左右,对资源消耗较大,所以在连接之前需要调用cancleDiscovery方法取消查找。完成配对之后使用BluetoothSocket进行连接,双方通过RFCOMM通道进行通信完成数据的读写。Android移动端通过与便携式医疗设备之间的协议对设备进行识别,截取接收到的数据中的有用信息完成对采集端数据的接收。开发过程中使用多线程技术完成蓝牙的连接和通信,以实现蓝牙的后台搜索与连接。

图2中Android端通过设备管理模块,对蓝牙设备进行操作并对接入的设备进行验证与分类管理,验证信息是靠便携式医疗终端与Android设备之间的通信协议规定。数据管理模块主要负责数据的接收、存储与打包上传。通过蓝牙接收的数据被传递到UI界面进行显示,同时数据被存储到Android本地的SQLite数据库中。这些数据还可以由数据管理模块进行打包并向服务器端上传。

图2 Android端在数据采集过程中的应用

2.3 Android移动端数据的显示与发送

Android系统最具代表性的特点之一就是其提供了可视化的设计框架。Android利用XML语言和Java语言结合的方式控制UI布局,并提供了各种各样的控件,在很大程度上降低了开发难度[5]。Android的界面写在res/layout的XML文件中,一般情况下一个XML文件对应一个界面。Android操作系统自带有一个轻量级的关系型数据库SQLite,对于一些重要的生理数据可以将其在本地存储起来以便于查询。通过使用SQL语句创建表并将重要的生理数据插入表中完成对数据的本地存储,查询时使用SQLiteDatabase.query方法将数据展示在一个ListView中方便用户查询存储的历史信息。

数据发送通过Android SDK中提供的socket使用TCP/IP协议与远程的服务器进行连接,在生理数据中加入包序号、采样时间等信息作为包头,以数据包的形式发送到服务器端,并对因网络不稳等因素造成的数据包丢失的情况及时请求重传,以保证服务器可以完整地接收数据信息。

2.4 Android移动端对推送数据的接收

Android 手机获取服务器上不定期更新的消息主要有两种方式:一种是不断地发送更新请求,或者称之为“轮询”方式;另外一种则是在发生改变时,由服务端主动将消息推送给客户端的用户,这种方式称为“推送”。两者相比“轮询”方式需要客户端以一定的时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务器端的同步。这种同步方案的最大问题是,当客户端以固定频率向服务器发起请求时,服务器端的数据可能并没有更新,这样会带来很多无谓的网络传输,而且频繁的启动数据连接必然会加速电量的消耗。而对于“推送”的情况,客户端与服务器端完成连接以后,只有服务器端有信息更新以后才会主动向客户端发送信息,在推送到来的周期内客户端只需要保持最基本的连接信息,因此减少了通信流量与手机电量的消耗,是移动端实时消息通知的理想解决方案。

本文使用MQTT协议完成对客户端信息的推送,MQTT是一个机器对机器(M2M)的“物联网”连接协议,是一个极其轻量级的基于发布/订阅的消息传输协议,其主要结构如图3所示[6]。与现有常用的GCM与XMPP推送相比,GCM推送方式受限于谷歌服务器,在国内运行不够稳定,而XMPP协议发展成熟且具有较强的扩展性,但其协议冗余、复杂,对电量与流量的消耗较大。MQTT是专门为低带宽、不稳定网络以及计算和处理能力受限的设备所设计的,协议采用小型传输,耗电量小,能大大降低网络流量,最小化数据包可有效分配与传输,非常适合移动系统上的应用[7]。

服务器端对于MQTT协议的实现主要依靠Mosquitto,Mosquitto是一款开源的 MQTT broker,它比较完整地实现了MQTT协议要求的各种基本功能,负责完成协议底层的网络通信机制以及针对各种不同类型消息的收发机制。Android端在应用编写时加入EclipsePaho API,这个API帮助完成服务器连接、话题的发布与订阅等功能。在订阅话题时设置为永久订阅以保证客户端在离线或者关闭等无法接收信息的情况下,再次连接服务器时仍可以接收到之前没有接收的信息。除了Activity以外,应用还使用Service组件,当用户退出应用时其继续在后台运行定时向服务器端发送心跳以保证连接不被断开,心跳以客户端发送PINGREQ报文并接受从BROKER返回PINGREQ报文的形式维持长连接。当被监控对象出现生理指标异常时,系统会向其家属、医生等共同订阅此话题的客户端推送消息,推送数据时将以Notification通知的形式提醒用户。

2.5 服务器结构

服务器端主要由服务器网站界面、后台Windows服务、数据库以及推送代理服务器组成。前台网站界面是使用B/S模式的网页程序,可以为有权限的用户(例如患者及其家属或主治医生等)提供历史数据的查询及数据折线图的显示等。后台Windows服务程序是运行在服务器上的后台程序,负责接收通过socket发送的数据,并对数据进行解包、验证、分组存入数据库中。后台数据库主要用来把数据分组建表储存起来(数据包括病人信息、血压、血氧等生理数据),以便后期数据的访问。当接收到的生理数据有严重异常时,Windows服务程序将消息发送给推送代理服务器,代理服务器负责将消息推送出去。代理服务器接收到生理指数异常、存在危险的信息后发布话题,所有订阅该话题的手机客户端将接收到推送的警告消息。服务器端整体结构如图4所示。

图4 系统服务器端总体结构

3 实现结果

经测试,在便携式医疗设备采集数据并发送时,Android端可以通过蓝牙接收到便携式医疗设备采集的生理指标,并且在服务器端有消息推送时,Android端可以以消息通知的方式显示接收的信息。实验结果如图5所示。

图5 实现结果

4 结束语

本文主要研究Android系统在远程医疗中的应用,通过使用带有Android系统的智能设备将便携式医疗设备采集的数据进行处理与发送。使用基于MQTT协议的推送系统,对紧急情况进行实时通知。结果表明,Android系统在远程医疗的数据采集与发送、紧急事件的通知方面具有良好的应用前景。

[1]刘建,周保利.远程医疗发展和管理问题的探讨[J].中华医院管理杂志,2001,17(1):50-51.

[2]胡伟.Android系统架构及其驱动研究[J].广州广播电视大学学报,2010,10(4):96-101.

[3]梁柱.Android应用程序自动化功能测试平台的研究与开发[D].广州:华南理工大学,2012.

[4]黄彬华.Android 4.X应用与开发实战手册 (第2版)——适用Android 4.X~2.X[M].北京:清华大学出版社,2013.

[5]杨越译.精通 Android2[M].北京:人民邮电出版社,2010.

[6]HUNKELER U,TRUONG H L,STANFORD-CLARK A.MQTT-S-a publish/subscribe protocol for wireless sensor networks[C].2008 3rd International Conference on Communication Systems Software and Middleware and Workshops,2008:791-798.

[7]IBM.MQTelemetryTransport[EB/OL].(2013-06-05) [2015-06-01].http://mqtt.org.

猜你喜欢
服务器端蓝牙生理
蓝牙音箱的直线之美
Linux环境下基于Socket的数据传输软件设计
打破生理“平衡”
基于BP神经网络的旋转血泵生理控制
简单、易用,可玩性强Q AcousticsBT3蓝牙音箱
适合自己的才是最好的 德生(TECSUN) BT-50蓝牙耳机放大器
妈妈们产后的生理烦恼
基于Qt的安全即时通讯软件服务器端设计
紧急:蓝牙指尖陀螺自燃!安全隐患频出
基于Qt的网络聊天软件服务器端设计