石永芳
摘要:醫(yī)療監(jiān)護(hù)工作需要精準(zhǔn)地掌握病人各項(xiàng)重要的身體指標(biāo),數(shù)據(jù)的實(shí)時(shí)性、準(zhǔn)確性越高,對(duì)病人的病情判定越準(zhǔn)確。針對(duì)傳統(tǒng)監(jiān)護(hù)設(shè)備便攜性差、移動(dòng)性差,成本較高的缺點(diǎn),設(shè)計(jì)了基于Android平臺(tái)的生理參數(shù)移動(dòng)監(jiān)護(hù)系統(tǒng)。系統(tǒng)將藍(lán)牙模塊與醫(yī)用傳感器結(jié)合,以Android手機(jī)作為數(shù)據(jù)中轉(zhuǎn)站,接收來(lái)自傳感器的數(shù)據(jù)并呈現(xiàn)給用戶,同時(shí)將數(shù)據(jù)發(fā)送給遠(yuǎn)端服務(wù)器。用手機(jī)模擬醫(yī)用傳感器對(duì)系統(tǒng)功能進(jìn)行了驗(yàn)證。
關(guān)鍵詞:移動(dòng)醫(yī)療;客戶端;藍(lán)牙技術(shù);Android
DOIDOI:10.11907/rjdk.143772
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):16727800(2015)001012102
0 引言
近年來(lái),隨著通信技術(shù)、生理信息傳感器等技術(shù)的巨大進(jìn)步,移動(dòng)醫(yī)療迅速發(fā)展。醫(yī)學(xué)檢測(cè)儀器正向多功能、智能化和微型化方向發(fā)展。數(shù)字化將和生理信號(hào)的測(cè)量技術(shù)及分析技術(shù)融為一體成為其顯著特點(diǎn)之一[1]。
目前,國(guó)內(nèi)已有20%的醫(yī)院開(kāi)始嘗試移動(dòng)醫(yī)療業(yè)務(wù),PDA、RFID等設(shè)備和技術(shù)得到了實(shí)際應(yīng)用[2]。但這些移動(dòng)醫(yī)療設(shè)備和技術(shù)受限于較窄的應(yīng)用范圍,還不能發(fā)揮全部作用。特別是針對(duì)社區(qū)、家庭的移動(dòng)醫(yī)療應(yīng)用還相當(dāng)缺乏。基于便攜的體域傳感器,日趨成熟的藍(lán)牙通信技術(shù)以及開(kāi)源的Android平臺(tái)移動(dòng)終端。本文設(shè)計(jì)了一個(gè)移動(dòng)醫(yī)療監(jiān)護(hù)系統(tǒng),如圖1所示。該系統(tǒng)可以將體域傳感器感知的人體各項(xiàng)身體參數(shù),利用藍(lán)牙通信技術(shù)發(fā)送給使用者的Android手機(jī)終端,最后通過(guò)手機(jī)網(wǎng)絡(luò)將數(shù)據(jù)提交醫(yī)療中心的服務(wù)端。分析處理過(guò)的數(shù)據(jù)可以圖表或者文字的方式顯示在使用者的手機(jī)端,從而解決傳統(tǒng)監(jiān)護(hù)設(shè)備無(wú)法實(shí)時(shí)實(shí)地提供監(jiān)護(hù)服務(wù)的問(wèn)題。考慮到成本,在系統(tǒng)測(cè)試時(shí),采用了另一部手機(jī)作為傳感器數(shù)據(jù)源,以體溫作為測(cè)試數(shù)據(jù)。
圖1 手機(jī)移動(dòng)醫(yī)療系統(tǒng)
1 Android架構(gòu)分析與開(kāi)發(fā)環(huán)境搭建
系統(tǒng)Android手機(jī)客戶端開(kāi)發(fā)工具為Eclipse,開(kāi)發(fā)版本為Android4.0.3 ADT0.95 jdk1.7.0。
1.1 Android平臺(tái)架構(gòu)
Android系統(tǒng)架構(gòu)由4層共5個(gè)部分組成[3]:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。其中,Android基于Linux 2.6提供核心系統(tǒng)服務(wù),例如:安全、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)堆棧、驅(qū)動(dòng)模型;每一個(gè)Android應(yīng)用程序是Dalvik虛擬機(jī)中的實(shí)例,運(yùn)行在它們自己的進(jìn)程中;Android包含了一個(gè)C/C++庫(kù)的集合,供Android系統(tǒng)的各個(gè)組件使用;通過(guò)提供開(kāi)放的開(kāi)發(fā)平臺(tái),開(kāi)發(fā)者可以自由地利用設(shè)備硬件優(yōu)勢(shì)進(jìn)行功能開(kāi)發(fā);Android裝配一個(gè)核心應(yīng)用程序集合,包括電子郵件客戶端、日歷、地圖等設(shè)置。所有應(yīng)用程序都是用Java編程語(yǔ)言寫(xiě)的。
1.2 Android系統(tǒng)中的藍(lán)牙
Android平臺(tái)支持藍(lán)牙協(xié)議棧,可以在兩個(gè)藍(lán)牙設(shè)備之間進(jìn)行數(shù)據(jù)傳輸。Android應(yīng)用框架層提供了允許藍(lán)牙進(jìn)行連接的API,通過(guò)這些API可以實(shí)現(xiàn)通過(guò)藍(lán)牙的應(yīng)用程序是無(wú)線連接,建立端到端的連接模式。其中, BluetoothAdapter類代表本地藍(lán)牙適配器,是所有藍(lán)牙交互的入口點(diǎn);BluetoothDevice類代表遠(yuǎn)端藍(lán)牙設(shè)備,可以請(qǐng)求遠(yuǎn)端藍(lán)牙設(shè)備連接或獲取遠(yuǎn)端藍(lán)牙設(shè)備的名稱、地址、種類和綁定狀態(tài);BluetoothSocket類代表藍(lán)牙套接字的接口,它是應(yīng)用程序通過(guò)輸入、輸出流與其它藍(lán)牙設(shè)備通信的連接點(diǎn);BluetoothClass類描述了藍(lán)牙設(shè)備的一般特點(diǎn)和能力。
1.3 Android開(kāi)發(fā)環(huán)境搭建
Android平臺(tái)進(jìn)行開(kāi)發(fā)使用的是Java語(yǔ)言。①安裝JDK,安裝時(shí)要將“Path”的環(huán)境變量修改為JDK安裝路徑中bin目錄的絕對(duì)路徑;②下載并安裝Eclipse;③在Android Developers下載androidsdk_r18windows.zip,運(yùn)行SDK Setup.exe,在用戶變量中新建PATH值為Android SDK中的tools絕對(duì)路徑;④安裝ADT插件;⑤為了使Android應(yīng)用程序可以在模擬器上運(yùn)行,必須創(chuàng)建AVD,即Android在Windows環(huán)境下的虛擬機(jī)。
2 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
根據(jù)Android手機(jī)系統(tǒng)運(yùn)行要求,考慮到用戶良好的使用體驗(yàn),本系統(tǒng)的程序響應(yīng)必須快速,且基本無(wú)BUG出現(xiàn)。主要功能模塊有:用戶登錄模塊、藍(lán)牙通信模塊、數(shù)據(jù)顯示模塊、數(shù)據(jù)上傳模塊。
2.1 用戶登錄注冊(cè)模塊
用戶登錄注冊(cè)模塊實(shí)現(xiàn)兩個(gè)功能:①用戶信息注冊(cè)功能;②用戶登錄功能。通過(guò)用戶注冊(cè)登錄后,不同的用戶會(huì)有不同的文件夾來(lái)保存身體各項(xiàng)參數(shù)數(shù)據(jù)信息,并且根據(jù)用戶注冊(cè)時(shí)的ID號(hào)來(lái)進(jìn)行數(shù)據(jù)篩選。
用戶信息管理采用了Android自帶的小型數(shù)據(jù)庫(kù)SQLite。作為一款輕型數(shù)據(jù)庫(kù),SQLite遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),資源占用率非常低,只需要幾百K的內(nèi)存。此外,它能夠與很多程序語(yǔ)言相結(jié)合,比如C#、PHP、Java等,還有ODBC接口,相較于Mysql、PostgreSQL這兩款世界著名的開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng)而言,其處理速度更快。
2.2 藍(lán)牙通信模塊
藍(lán)牙通信模塊實(shí)現(xiàn)兩個(gè)功能[45]:①藍(lán)牙設(shè)備的查找和匹配;②通過(guò)藍(lán)牙通信協(xié)議,實(shí)現(xiàn)模擬傳感器數(shù)據(jù)的發(fā)送和手機(jī)端數(shù)據(jù)的接收。用戶登錄后,系統(tǒng)程序會(huì)首先判斷本機(jī)藍(lán)牙是否為可用狀態(tài),如果處于關(guān)閉狀態(tài)則打開(kāi)藍(lán)牙,用戶通過(guò)手動(dòng)搜索附近藍(lán)牙設(shè)備完成與模擬傳感器的匹配。當(dāng)完成匹配后,模擬傳感器開(kāi)始發(fā)送模擬的用戶體溫?cái)?shù)據(jù),并由手機(jī)端解析接收。通過(guò)建立一個(gè)BluetoothActivity.java類的Activity,用于顯示“設(shè)備列表”和“開(kāi)啟服務(wù)“這兩個(gè)功能按鈕以及藍(lán)牙設(shè)備的搜尋。
2.3 數(shù)據(jù)顯示模塊
數(shù)據(jù)顯示模塊實(shí)現(xiàn)兩個(gè)功能[67]:①將實(shí)時(shí)的體溫?cái)?shù)據(jù)信息展示給用戶,并給出相應(yīng)數(shù)據(jù)說(shuō)明;②通過(guò)得到的體溫?cái)?shù)據(jù)的變化圖表,直觀地反映出某一時(shí)段身體體溫的變化。每一次通過(guò)藍(lán)牙通信模塊得到的數(shù)據(jù)都將實(shí)時(shí)地反應(yīng)到用戶的手機(jī)端。 為了實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)顯示,每當(dāng)藍(lán)牙傳感器發(fā)來(lái)最新的數(shù)據(jù)時(shí),系統(tǒng)都會(huì)發(fā)送一條廣播,當(dāng)接收到數(shù)據(jù)更新的廣播時(shí),通過(guò)handler發(fā)送消息通知界面更新顯示。為了實(shí)現(xiàn)將數(shù)據(jù)變化以圖標(biāo)的形式顯示給用戶,系統(tǒng)使用了第三方插件achartengine,用來(lái)生成各種數(shù)據(jù)的圖表。
//注冊(cè)廣播接收器
IntentFilter filter = new IntentFilter();
filter.addAction(GlobalUtils.REQUEST_LATEST_TEMPERATURE);
context.registerReceiver(receiver, filter);
2.4 數(shù)據(jù)上傳模塊
數(shù)據(jù)上傳模塊實(shí)現(xiàn)兩個(gè)功能[89]:一是監(jiān)控手機(jī)端網(wǎng)絡(luò)狀況;二是通過(guò)http協(xié)議將手機(jī)端接收到得數(shù)據(jù)以XML格式發(fā)送至服務(wù)器端。用戶手機(jī)不一定一直有網(wǎng)絡(luò)連接,需要監(jiān)控手機(jī)網(wǎng)絡(luò)的改變,當(dāng)用戶選擇提交數(shù)據(jù)時(shí),如果有網(wǎng)絡(luò)則直接提交數(shù)據(jù)到服務(wù)器端,如果沒(méi)有網(wǎng)絡(luò)則等待網(wǎng)絡(luò)連接之后再發(fā)送。
數(shù)據(jù)上傳的過(guò)程并不可見(jiàn),當(dāng)用戶點(diǎn)擊提交按鈕時(shí),系統(tǒng)首先會(huì)判斷當(dāng)前手機(jī)的網(wǎng)絡(luò)狀態(tài),如果網(wǎng)絡(luò)處于關(guān)閉狀態(tài),則用Toast提示用戶網(wǎng)絡(luò)異常。如果網(wǎng)絡(luò)可用,則提交數(shù)據(jù)至服務(wù)器,并提示用戶上傳成功。
//讀取當(dāng)天生成的數(shù)據(jù)字段生成XML到SD卡中
FinalDb db = FinalDb.create(context);
List
3 結(jié)語(yǔ)
使用移動(dòng)醫(yī)療系統(tǒng),用戶可以通過(guò)移動(dòng)客戶端來(lái)了解自己的生理健康狀況,遠(yuǎn)端服務(wù)器可以為醫(yī)生對(duì)于患者的檢測(cè)提供依據(jù),更及時(shí)地發(fā)現(xiàn)患者的身體變化以便作出準(zhǔn)確的診斷。本文設(shè)計(jì)的移動(dòng)醫(yī)療系統(tǒng)利用手機(jī)模擬醫(yī)用感器提供體溫?cái)?shù)據(jù),以Android平臺(tái)作為中間站,將模擬數(shù)據(jù)發(fā)送到服務(wù)器端,并且將體溫?cái)?shù)據(jù)實(shí)時(shí)顯示在用戶的手機(jī)上,驗(yàn)證了系統(tǒng)設(shè)計(jì)的可行性。