劉璐,王子賢,周洪利,董蘇,史久琛
(大連理工大學軟件學院,大連116621)
科技手段可以幫助人們了解自身體能狀況,提高自身身體素質,隨著芯片產業和物聯網的快速發展,使用傳感器對人類身體及個人運動進行監測和管理,成為一個最具應用價值的研究方向[1]。在眾多的傳感器集成平臺中,智能手機平臺是最重要、最普及的一類。Android系統是由美國谷歌公司開發的開源手機操作系統,該平臺由操作系統、中間件、用戶界面和應用軟件組成,是以開放特性聞名的具有真正移動特性的操作系統[2]。平臺本身支持多種傳感器,利用Android平臺進行人體運動及體能方向的研究可以充分利用平臺的移動性、開放性。
本系統是一種基于Android平臺開發的運動健康分析軟件,主要研究了以下兩個問題:傳感器數據的采集與處理,以及根據人體條件(如體重、年齡)智能判斷合理運動量和食物卡路里合理攝取量。
Talking Data 2014移動互聯網數據報告顯示,在iOS與Android兩個平臺上使用軟件進行健康管理的用戶規模龐大,并且增長速度不斷提高。例如,咕咚、樂動力跑步等健康類App的用戶量已超過千萬,Nike Training、超級減肥王等App下載量增長速度超過300%[3]。健身類App輔助指導用戶進行鍛煉身體,改變了用戶需要抽出固定時間段進行鍛煉的情況,用戶可以選擇合適的場所甚至是在家鍛煉身體,更加適應生活壓力大,工作繁重的用戶,因此受到了很多人的歡迎。縱觀各種健身鍛煉軟件,能夠將運動和飲食情況結合起來的卻少之又少。而本軟件不僅包含用戶最常見的鍛煉方式,例如步行和跑步,還結合了卡路里攝取平衡的計算,更好地輔助用戶鍛煉身體。除此以外,本軟件界面簡潔,功能完善且操作友好。
本軟件的系統架構圖如圖1所示,包括典型運動檢測、卡路里均衡、交流平臺三個模塊。
典型運動檢測模塊包括計步和跑步檢測兩個子模塊,功能為檢測用戶步數和記錄跑步信息。卡路里均衡模塊包括用戶特征推薦、卡路里計算兩個子模塊,功能為根據用戶身體情況計算每日推薦步數和每日推薦卡路里攝入量,記錄每日食物攝取情況以及根據以上信息生成卡路里消耗數目建議。交流平臺模塊包括個人賬戶和論壇兩個子模塊,功能包括為建立用戶個人賬戶、發送用戶動態及接收其他用戶動態。
本模塊的主要作用是檢測用戶的運動情況,包括每日步行數和跑步量,并根據用戶的身體狀況,推測用戶的步長,從而計算用戶每日步行公里數,然后以Android通用的輕量級數據庫SQLite保存到本地,并以日歷的形式展示給用戶。

圖1 系統架構圖
系統使用Android4.4新增的STEP_DETECTOR以及STEP_COUNTER傳感器。其中STEP_COUNTER是計步傳感器,用于記錄激活后的步伐數。STEP_DETECTOR是步行檢測傳感器,用戶每走一步就觸發一次事件。
STEP_DETECTOR通過分析加速度計的輸入識別用戶何時走步,緊接著每走一步都會觸發一個事件。而STEP_COUNTER則是跟蹤自從上一次設備重新啟動以來用戶所有的步行數,每當計數更改,都會觸發一個事件。雖然傳感器的邏輯和管理內置于平臺和底層硬件,在應用程序中不需要維護自己的檢測算法,但是STEP_COUNTER中每次設備重新啟動都會將數據清零,用戶體驗感較差,故重寫了STEP_COUNTER的計數函數,通過不斷備份步數保存用戶即時步數不丟失。除此以外,因為這兩種傳感器都實現了硬件低功耗,系統的整體功耗也隨之下降了許多,不會成為用戶的電量“殺手”。計步算法流程如圖2所示。
(1)GPS定位
系統需要配置GPS定位權限。為保護用戶信息安全,在Android 6.0以后,Android系統取消了安裝時即賦予該App所有權限的機制,尤其對于一些“隱私性”權限,App需要在運行時逐個詢問用戶請求授予權限。每次用戶運行跑步模式,系統都會請求獲取權限以定位用戶位置。本系統采用了高德地圖Android API移動定位,在高德開發者官方網站上獲取Key,并配置相關參數以啟動定位,應用程序通過使用API,可以無縫的在基站定位、Wi-Fi定位及GPS定位間切換。
(2)跑步路線繪制
系統通過自定義Marker標記并記錄位置經緯度值,并通過BitmapDescriptor設置自定義圖標。當用戶點擊開始跑步時,每兩秒獲取一次用戶的GPS數據,將給出的定位點連接即形成路線。主要利用Android的動畫機制繪制路線。

圖2 計步流程圖
系統采用Android常用的輕量級數據庫SQLite存儲用戶最近7天的運動情況,并以日歷欄的形式呈現給用戶,方便用戶對比每日運動量。除此以外,系統利用Android的Notification消息推送機制,可以使用戶退出軟件后,不需打開軟件仍可以在通知欄查看每日運動步數,更加方便用戶的使用。
卡路里均衡模塊的功能為根據用戶個人信息計算推薦健康建議。卡路里均衡模塊包括用戶特征推薦,卡路里計算兩個子模塊。
每位用戶都具有自身的身體特征,包括性別、年齡、身高和體重。一個正常人每日所需的熱量和其體重相關,每小時攝取熱量和體重的關系,約為1千卡/小時/千克,即4.186千焦/小時/千克。所以,一個重50千克的成年人每日所需的正常平均熱量Q如下:

人一天內消耗掉的總熱量為基本消耗熱量(人體基礎代謝消耗掉的熱量)與運動消耗熱量(日常生活動作消耗掉的熱量)之和。按照性別和年齡可由表1中幾個公式表示(其中體重用W/kg表示,活動系數用K表示)

表1 熱量消耗公式
故當用戶輸入個人基本信息時,系統根據用戶身體情況計算出每日推薦卡路里消耗量。
本系統將常見的食物分為“蔬菜”、“水果”、“主食”及“肉類”四種。不同的食物產生不同的能量,通過RecycleView顯示100克食物中所含能量。對于肥胖癥、糖尿病、高血壓等慢性病患者來講,控制每天身體所攝取的能量,是減輕他們本身病變的方法。因此,不僅僅是對患者,對普通用戶也有必要為每一種食物測量所含的能量,以供用戶計算每餐攝入的總能量。用戶在RecycleView中點擊條目,輸入攝取克數,點擊保存后,系統便將數據插入到數據庫中保存,以供后續處理。
系統會根據用戶特征推薦算法計算得出每日推薦步數,然后計算得出活動系數進行乘法運算。所以當用戶輸入個人基本信息時,系統會自動根據用戶數據計算得到每日推薦卡路里消耗數目。用戶可以根據系統給出的每日所需熱量,每日卡路里消耗數目,每日推薦卡路里消耗數目來合理規劃自己的活動。
交流平臺模塊的功能為通過搭建服務器,為用戶建立個人賬戶并實現動態發送信息和刷新獲取信息。交流平臺模塊包括個人賬戶子模塊和論壇模塊。系統使用Android網絡開源框架OKHttp,這是目前較為常用的安卓端輕量級框架,由移動支付Square公司設計用于替代HttpUrlConnection和Apache HttpClient。
系統為用戶搭建服務器,為用戶建立個人賬戶,將用戶的基本信息和數據保存到MySQL數據庫中。當用戶退出賬戶后重新登錄時,系統將從服務器獲取用戶信息并自動填寫,方便用戶使用,保障用戶數據在更換設備后不會丟失。為保護用戶隱私,系統利用OKHttp的post方法向服務器發起用戶注冊和登陸。個人賬戶界面如圖3所示。

圖3 個人賬戶界面
論壇模塊包括用戶向服務器發送文字、圖片動態以及從服務器獲取其他用戶發送的動態。用戶可選擇不超過六張圖片上傳,系統使用Android Retrofit 2.0框架,設計了FileUploadService接口并實現了單張與多張圖片上傳的解決方案。上傳圖片時,系統使用Http multipart/form-data的上傳報文格式,并調用photopicker庫、photopicker庫中封裝了選取圖片、使用相機,查看和刪除選取圖片等功能。論壇界面如圖4所示。

圖4 論壇界面
基于Android的運動健康分析系統可以根據用戶個人身體信息及用戶每日輸入的食物攝取情況為用戶提供步行數目參考和卡路里攝入參考,具有界面用戶友好度高、功能完整、將卡路里攝取與運動相結合等特點。下一步可以重點設計社交模塊,增加點贊及評論功能。
[1]周洪波.物聯網:技術、應用、標準和商業模式[M].北京:電子工業出版社,2011.
[2]楊豐盛.Android應用開發揭秘[M].北京:機械工業出版社,2010.
[3]Talking Data移動互聯網大數據平臺.Talking Data 2014移動互聯網數據報告[R/OL].(2015,01,21).http://mi.talkingdata.com/report-detail.html?id=427