摘 要: 為滿足人們對于遠程醫(yī)療的需求,推出了一個應用Android移動終端的解決方案。該方案結合Android系統(tǒng)的特點,設計了一套采集、顯示存儲、報警推送于一體的遠程醫(yī)療監(jiān)測系統(tǒng)。首先對Android框架與系統(tǒng)架構進行介紹,然后對系統(tǒng)涉及到的Android系統(tǒng)藍牙、Socket等通信方式的開發(fā)進行分析,并對Android設備在數(shù)據(jù)采集、存儲、處理中的應用進行介紹,最后應用MQTT協(xié)議完成了對報警信息的推送。結果表明Android系統(tǒng)在遠程醫(yī)療服務系統(tǒng)中有很大的應用前景。
關鍵詞: Android;遠程醫(yī)療;藍牙;消息推送;MQTT
0 引言
隨著社會的進步,人民生活水平的提高,人們越來越關注自身的身體健康。人們都希望可以足不出戶享受來自醫(yī)院及醫(yī)生的診療或是根據(jù)自身的指標得到針對性的健康指導。對于一些慢性病患者及時將重要的生理參數(shù)告知醫(yī)生可以防止病情的突然惡化。在西方一些發(fā)達國家,遠程診療技術已經應用于實際生活,患者在當?shù)鼐涂梢韵硎艿角Ю镏獾膶<姨峁┑闹委煼誟1]。
另一方面,智能移動終端的普及與移動網絡的發(fā)展使得遠程醫(yī)療成為可能。智能終端如智能手機、PAD等,其強大的功能可以實現(xiàn)遠程醫(yī)療中醫(yī)療數(shù)據(jù)的輸入、輸出、顯示和本地存儲等。常見的智能終端操作系統(tǒng)有Android、iOS、kindle等,相比于其他系統(tǒng),Android基于Linux內核,具有開放性和免費性的特點。現(xiàn)有的遠程醫(yī)療信息系統(tǒng)主要依賴醫(yī)生通過客戶端主動訪問服務器獲取病人信息,無法保證信息的實時性,在面對突發(fā)事件時無法及時處理。在此背景下,本文結合現(xiàn)有醫(yī)療信息系統(tǒng)與Android操作系統(tǒng)的特點對Android遠程醫(yī)療信息系統(tǒng)的應用以及相關技術進行研究。
1 遠程醫(yī)療信息系統(tǒng)的整體框架
系統(tǒng)的第一部分是用戶生理參數(shù)的采集。用戶使用便攜式醫(yī)療設備對心率、血壓等生理數(shù)據(jù)進行采集,并通過藍牙模塊將采集到的數(shù)據(jù)發(fā)送到移動設備端。移動設備主要是安裝Android操作系統(tǒng)的智能手機和平板電腦,移動端應用程序需要完成兩項功能,一是接收便攜式醫(yī)療設備采集的數(shù)據(jù)并進行本地顯示與存儲,二是應用程序連接到服務器,將所接收的數(shù)據(jù)發(fā)送出去同時準備接收服務器端的推送。服務器端接收信息并存入數(shù)據(jù)庫中,同時配有前臺網頁以便用戶查詢。此外通過消息代理服務器通過訂閱/發(fā)布的形式向客戶端推送患者數(shù)據(jù)異常的消息或根據(jù)患者病史提供醫(yī)囑。其總體結構如圖1所示。
2 遠程醫(yī)療系統(tǒng)Android應用的設計與介紹
2.1 Android平臺簡介
Android是由Google以及Google牽頭的開放手機聯(lián)盟于2007年11月5日推出的一款開源智能手機操作系統(tǒng)[2]。并且,Google采取Apache免費開源許可證的授權方式,發(fā)布了Android操作系統(tǒng)的源代碼,以便各手機生產商推出基于Android操作系統(tǒng)的智能手機,Android操作系統(tǒng)后來更是逐漸拓展到平板電腦及其他領域上[3]。Android系統(tǒng)架構由5部分組成,分別是Linux內核(Linux Kernel)、系統(tǒng)運行層(Android Runtime)、函數(shù)庫(Libraries)、應用框架(Application Framework)和應用層(Applications)。應用層主要包括電話程序、SMS短消息程序、瀏覽器程序等為用戶提供手機基本功能的軟件集合。應用框架層不直接與用戶接觸,主要面向Android開發(fā)人員,開發(fā)人員可以調用應用框架提供的各種API,方便對應用程序的開發(fā)。函數(shù)庫包含常用的C/C++庫,如Surface Manager、OpenGL ES、SGL、SSL、SQLite等。系統(tǒng)運行層可分為Android核心函數(shù)庫與虛擬機,為應用程序提供運行環(huán)境。Linux核心為Android提供主要的系統(tǒng)服務如安全性管理、內存管理、網絡棧、驅動模型、電源管理等[4]。
2.2 Android的數(shù)據(jù)采集
隨著人們生活水平的不斷提高,人們對自身的健康也越來越關注。定期體檢獲取自身生理數(shù)據(jù)、及時改變生活習慣可以有效地避免疾病的發(fā)生。傳統(tǒng)體檢需要人們到醫(yī)院或者社區(qū)醫(yī)療中心,由于路途遙遠設備資源有限勢必造成大量的時間浪費。便攜式醫(yī)療設備的出現(xiàn)極大地改變了這種現(xiàn)狀,人們可以隨時隨地采集自身的生理數(shù)據(jù)同時避免了路途遙遠和排隊帶來的困擾。
市場上現(xiàn)有的便攜醫(yī)療設備很多都帶有藍牙功能,而Android SDK中提供了用于藍牙通信的標準API,使得通過Android移動端設備獲取便攜式醫(yī)療設備上采集的信息成為可能。Android藍牙通信主要使用BluetoothAdapter類,它提供了對于藍牙操作的各種方法。要使用藍牙首先要在AndroidManifest.xml中加入權限:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
在具體操作時首先使用enable方法打開藍牙,之后使用startDiscovery對附近的藍牙設備進行搜索。使用系統(tǒng)廣播的方式將設備信息加入設備列表,由于整個掃描過程需要12 s左右,對資源消耗較大,所以在連接之前需要調用cancleDiscovery方法取消查找。完成配對之后使用BluetoothSocket進行連接,雙方通過RFCOMM通道進行通信完成數(shù)據(jù)的讀寫。Android移動端通過與便攜式醫(yī)療設備之間的協(xié)議對設備進行識別,截取接收到的數(shù)據(jù)中的有用信息完成對采集端數(shù)據(jù)的接收。開發(fā)過程中使用多線程技術完成藍牙的連接和通信,以實現(xiàn)藍牙的后臺搜索與連接。
圖2中Android端通過設備管理模塊,對藍牙設備進行操作并對接入的設備進行驗證與分類管理,驗證信息是靠便攜式醫(yī)療終端與Android設備之間的通信協(xié)議規(guī)定。數(shù)據(jù)管理模塊主要負責數(shù)據(jù)的接收、存儲與打包上傳。通過藍牙接收的數(shù)據(jù)被傳遞到UI界面進行顯示,同時數(shù)據(jù)被存儲到Android本地的SQLite數(shù)據(jù)庫中。這些數(shù)據(jù)還可以由數(shù)據(jù)管理模塊進行打包并向服務器端上傳。
2.3 Android移動端數(shù)據(jù)的顯示與發(fā)送
Android系統(tǒng)最具代表性的特點之一就是其提供了可視化的設計框架。Android利用XML語言和Java語言結合的方式控制UI布局,并提供了各種各樣的控件,在很大程度上降低了開發(fā)難度[5]。Android的界面寫在res/layout的XML文件中,一般情況下一個XML文件對應一個界面。Android操作系統(tǒng)自帶有一個輕量級的關系型數(shù)據(jù)庫SQLite,對于一些重要的生理數(shù)據(jù)可以將其在本地存儲起來以便于查詢。通過使用SQL語句創(chuàng)建表并將重要的生理數(shù)據(jù)插入表中完成對數(shù)據(jù)的本地存儲,查詢時使用SQLiteDatabase.query方法將數(shù)據(jù)展示在一個ListView中方便用戶查詢存儲的歷史信息。
數(shù)據(jù)發(fā)送通過Android SDK中提供的socket使用TCP/IP協(xié)議與遠程的服務器進行連接,在生理數(shù)據(jù)中加入包序號、采樣時間等信息作為包頭,以數(shù)據(jù)包的形式發(fā)送到服務器端,并對因網絡不穩(wěn)等因素造成的數(shù)據(jù)包丟失的情況及時請求重傳,以保證服務器可以完整地接收數(shù)據(jù)信息。
2.4 Android移動端對推送數(shù)據(jù)的接收
Android手機獲取服務器上不定期更新的消息主要有兩種方式:一種是不斷地發(fā)送更新請求,或者稱之為“輪詢”方式;另外一種則是在發(fā)生改變時,由服務端主動將消息推送給客戶端的用戶,這種方式稱為“推送”。兩者相比“輪詢”方式需要客戶端以一定的時間間隔向服務端發(fā)出請求,以頻繁請求的方式來保持客戶端和服務器端的同步。這種同步方案的最大問題是,當客戶端以固定頻率向服務器發(fā)起請求時,服務器端的數(shù)據(jù)可能并沒有更新,這樣會帶來很多無謂的網絡傳輸,而且頻繁的啟動數(shù)據(jù)連接必然會加速電量的消耗。而對于“推送”的情況,客戶端與服務器端完成連接以后,只有服務器端有信息更新以后才會主動向客戶端發(fā)送信息,在推送到來的周期內客戶端只需要保持最基本的連接信息,因此減少了通信流量與手機電量的消耗,是移動端實時消息通知的理想解決方案。
本文使用MQTT協(xié)議完成對客戶端信息的推送,MQTT是一個機器對機器(M2M)的“物聯(lián)網”連接協(xié)議,是一個極其輕量級的基于發(fā)布/訂閱的消息傳輸協(xié)議,其主要結構如圖3所示[6]。與現(xiàn)有常用的GCM與XMPP推送相比,GCM推送方式受限于谷歌服務器,在國內運行不夠穩(wěn)定,而XMPP協(xié)議發(fā)展成熟且具有較強的擴展性,但其協(xié)議冗余、復雜,對電量與流量的消耗較大。MQTT是專門為低帶寬、不穩(wěn)定網絡以及計算和處理能力受限的設備所設計的,協(xié)議采用小型傳輸,耗電量小,能大大降低網絡流量,最小化數(shù)據(jù)包可有效分配與傳輸,非常適合移動系統(tǒng)上的應用[7]。
服務器端對于MQTT協(xié)議的實現(xiàn)主要依靠Mosquitto,Mosquitto是一款開源的MQTT broker,它比較完整地實現(xiàn)了MQTT協(xié)議要求的各種基本功能,負責完成協(xié)議底層的網絡通信機制以及針對各種不同類型消息的收發(fā)機制。Android端在應用編寫時加入Eclipse Paho API,這個API幫助完成服務器連接、話題的發(fā)布與訂閱等功能。在訂閱話題時設置為永久訂閱以保證客戶端在離線或者關閉等無法接收信息的情況下,再次連接服務器時仍可以接收到之前沒有接收的信息。除了Activity以外,應用還使用Service組件,當用戶退出應用時其繼續(xù)在后臺運行定時向服務器端發(fā)送心跳以保證連接不被斷開,心跳以客戶端發(fā)送PINGREQ報文并接受從BROKER返回PINGREQ報文的形式維持長連接。當被監(jiān)控對象出現(xiàn)生理指標異常時,系統(tǒng)會向其家屬、醫(yī)生等共同訂閱此話題的客戶端推送消息,推送數(shù)據(jù)時將以Notification通知的形式提醒用戶。
2.5 服務器結構
服務器端主要由服務器網站界面、后臺Windows服務、數(shù)據(jù)庫以及推送代理服務器組成。前臺網站界面是使用B/S模式的網頁程序,可以為有權限的用戶(例如患者及其家屬或主治醫(yī)生等)提供歷史數(shù)據(jù)的查詢及數(shù)據(jù)折線圖的顯示等。后臺Windows服務程序是運行在服務器上的后臺程序,負責接收通過socket發(fā)送的數(shù)據(jù),并對數(shù)據(jù)進行解包、驗證、分組存入數(shù)據(jù)庫中。后臺數(shù)據(jù)庫主要用來把數(shù)據(jù)分組建表儲存起來(數(shù)據(jù)包括病人信息、血壓、血氧等生理數(shù)據(jù)),以便后期數(shù)據(jù)的訪問。當接收到的生理數(shù)據(jù)有嚴重異常時,Windows服務程序將消息發(fā)送給推送代理服務器,代理服務器負責將消息推送出去。代理服務器接收到生理指數(shù)異常、存在危險的信息后發(fā)布話題,所有訂閱該話題的手機客戶端將接收到推送的警告消息。服務器端整體結構如圖4所示。
3 實現(xiàn)結果
經測試,在便攜式醫(yī)療設備采集數(shù)據(jù)并發(fā)送時,Android端可以通過藍牙接收到便攜式醫(yī)療設備采集的生理指標,并且在服務器端有消息推送時,Android端可以以消息通知的方式顯示接收的信息。實驗結果如圖5所示。
4 結束語
本文主要研究Android系統(tǒng)在遠程醫(yī)療中的應用,通過使用帶有Android系統(tǒng)的智能設備將便攜式醫(yī)療設備采集的數(shù)據(jù)進行處理與發(fā)送。使用基于MQTT協(xié)議的推送系統(tǒng),對緊急情況進行實時通知。結果表明,Android系統(tǒng)在遠程醫(yī)療的數(shù)據(jù)采集與發(fā)送、緊急事件的通知方面具有良好的應用前景。
參考文獻
[1] 劉建,周保利.遠程醫(yī)療發(fā)展和管理問題的探討[J].中華醫(yī)院管理雜志,2001,17(1):50-51.
[2] 胡偉. Android系統(tǒng)架構及其驅動研究[J].廣州廣播電視大學學報,2010,10(4):96-101.
[3] 梁柱.Android應用程序自動化功能測試平臺的研究與開發(fā)[D].廣州:華南理工大學,2012.
[4] 黃彬華.Android 4.X應用與開發(fā)實戰(zhàn)手冊(第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.