黃卓勛,郭湘南
(1.武漢郵電科學研究院 湖北 武漢 430074;2.烽火通信科技股份有限公司 湖北 武漢 430074)
基于Android手機傳感器在健身領域的運用
黃卓勛1,郭湘南2
(1.武漢郵電科學研究院 湖北 武漢 430074;2.烽火通信科技股份有限公司 湖北 武漢 430074)
為了滿足市民日益增長的健身需求,結合智能手機有很高普及率的現(xiàn)狀,提出一種運用安卓手機自帶的傳感器來監(jiān)測,規(guī)范,管理用戶健身運動的應用實現(xiàn)。在Android手機系統(tǒng)的應用層開發(fā),主要運用的有手機的加速度傳感器 ,方向傳感器,亮度傳感器等等,實現(xiàn)對常見的健身運動如仰臥起坐,平板運動,跑步等進行測量與記錄。運用表明,相比自發(fā)性鍛煉,此方法可使健身運動更科學與精確,對用戶堅持健身起到積極作用。
Android;智能手機;傳感器監(jiān)測;健身運動
隨著科技與經(jīng)濟的發(fā)展,智能手機的普及率已逐步提升,但高壓力的都市生活也影響了人們的身體健康,健身運動也隨之流行起來。然而可惜的是并不是所有人都能有充足的時間與金錢去健身房,這就產(chǎn)生了如何在家里也能夠科學有效健身運動的問題。對一般人而言,家中獨自運動相比健身房而言,所欠缺的是器械種類不全,健身教練的指導監(jiān)督以及引導積極的運動氛圍。如果能結合Android智能手機與健身運動來有效解決這些問題,將對人們自發(fā)鍛煉,提高身體素質(zhì)起到積極作用。器械種類不全的問題,由于涉及到硬件條件,經(jīng)濟狀況不同,較難獨自解決,但對于健身的指導監(jiān)督和對堅持鍛煉的引導,則可以在Android智能手機的幫助下實現(xiàn)。
手機傳感器是安卓手機上所有可用感應器,能夠識別該手機硬件支持哪些傳感器,并提供對我們?nèi)粘I钇鹬匾饔玫膫鞲泄ぞ?。目前主流的Android手機都配備有通用傳感器,可以對加速度,方向,亮度等環(huán)境參數(shù)進行檢測,而這些參數(shù)也可以體現(xiàn)在健身運動當中,從而側面來監(jiān)控并記錄健身數(shù)據(jù)。常見且條件要求簡單鍛煉方式,如跑步,仰臥起坐,跳繩,平板運動等,都可以利用Android手機完成監(jiān)控。在此前提下,開發(fā)一款高效、穩(wěn)定、可靠的Android手機健身程序是可行且有意義的。本文提出的一種Android手機健身程序可以實現(xiàn)對健身動作的簡單識別,滿足健身輔助的基本功能。
1.1 應用程序系統(tǒng)構架
此應用基于Android架構,可以大致分為4層結構,5個區(qū)域。
1)Linux內(nèi)核層
Android系統(tǒng)是基于Linux2.6內(nèi)核的,Linux內(nèi)核層是給Android設備的多類硬件提供底層驅(qū)動工作的,比如顯示驅(qū)動,攝像驅(qū)動,音頻播放驅(qū)動,藍牙連接驅(qū)動,Wi-Fi的驅(qū)動,電源的管理驅(qū)動等[1]。
2)系統(tǒng)運行庫層
系統(tǒng)運行庫層是通過C/C++庫來為手機系統(tǒng)提供主要特性支持的,如它的OpenGL/ES庫提供了3D繪圖的支持,SQLite庫可以提供數(shù)據(jù)庫相關支持,Webkit庫是用來支持瀏覽器內(nèi)核的等。
在系統(tǒng)運行庫層同時也有Android運行時庫,這些主要是用來提供了一些核心庫的,可以幫助開發(fā)者用Java語言來開發(fā)Android應用。另外在這些庫中還包含了Dalvik虛擬機,不同于Java虛擬機,這個是專門為移動設備服務的,所以針對手機內(nèi)存和CPU性能會是有限的等情況作了優(yōu)化。
3)應用框架層
應用框架層[2]主要是提供在構成應用程序時也許會用到的各種API,在Android中常見的一些核心自帶應用就是基于這些API開發(fā)的,我們軟件開發(fā)者也可以利用這些API來編寫獨自的應用。
4)應用層
所有安裝在手機上的應用程序都是屬于應用層的[3-4],例如系統(tǒng)默認的聯(lián)系人列表,短信服務等程序,也包括那些從網(wǎng)上下載的應用,當然,其中也包括了本應用。
1.2 應用程序工作原理
打開軟件,執(zhí)行相應健身運動時,首先會在程序的開始檢測手機是否自帶有需要的傳感器類型。當存在對應的傳感器時,自動在軟件中注冊并新建傳感器[5-6],準備監(jiān)測特定的運動狀態(tài)。不同的健身運動會用到不同的傳感器,有的也會用到多個傳感器。情形如圖1所示。
運動監(jiān)測[7-8]主要運用的有各類型手機傳感器,系統(tǒng)的Timer計時器,SQLite手機數(shù)據(jù)庫,部分運動還利用了百度地圖定位API。傳感器用于獲取用戶的運動參數(shù)[9],Timer計時器用于獲取運動時間來計算卡路里等數(shù)據(jù),SQLite數(shù)據(jù)庫[10]用于儲存運動的詳細信息便于查詢,百度地圖API用于獲取室外跑步距離的參數(shù)。整款軟件是基于JAVA程序編寫的。
圖1 健身軟件與手機傳感器交互
1.3 應用程序工作流程
整個應用程序的流程如圖2所示。
圖2 健身軟件運行流程
1)初始化程序:為程序運行創(chuàng)建環(huán)境,建立數(shù)據(jù)庫,根據(jù)用戶是否第一次進入程序來決定顯示引導欄目與否。
2)檢測傳感器是否存在:如果存在,則嘗試軟件注冊并新建傳感器,等待程序調(diào)用,如果沒有傳感器,則彈出提示,說明給用戶程序無法繼續(xù)進行。
3)開始健身運動:將手機放置在合適的位置以便檢測健身運動參數(shù)后,用戶確認開始后,開始自己的運動。
4)檢測是否獲取到運動參數(shù):用戶確認運動,計時器開始計時,應用程序開始嘗試獲取運動參數(shù),當獲取到參數(shù)時,記錄原始參數(shù),判斷其是否合理,舍掉不合理有誤的部分。如果沒獲取到參數(shù),則嘗試重新獲取直到獲取到參數(shù)。如果一直未獲取到,則彈出提示,說明獲取失敗。
5)整理參數(shù)并計算卡路里等數(shù)值:獲取計時器的計時,將原始參數(shù)帶入提前設置在應用里的計算公式,計算卡路里等非直觀參數(shù)。
6)查詢此日期是否已有無數(shù)據(jù):獲取系統(tǒng)日期與用戶名稱,根據(jù)日期與名稱查詢SQLite數(shù)據(jù)庫[11-12],查看此條件下有無數(shù)據(jù),有數(shù)據(jù)則將數(shù)據(jù)更新,覆蓋掉舊的數(shù)據(jù),沒有數(shù)據(jù)則新增數(shù)據(jù),保存數(shù)據(jù)至SQLite數(shù)據(jù)庫。
7)輸入數(shù)據(jù)查詢條件:當用戶進入查詢界面時,提示輸入查詢條件,如果條件輸入有誤則彈出提示。
8)查詢此條件下有無數(shù)據(jù):根據(jù)用戶輸入的日期,運動種類,查詢范圍等條件查詢數(shù)據(jù)庫,如果有數(shù)據(jù)則顯示出來,沒有則提示用戶查無數(shù)據(jù)。
9)將查到的數(shù)據(jù)顯示出來。
2.1 關鍵技術說明
1)手機傳感器
與普通傳感器不一樣,手機傳感器內(nèi)置于智能手機內(nèi),所以需要體積足夠小,在滿足一般使用需求條件下,可以犧牲部分性能。一般來說只能檢測到變化,如果檢測的屬性沒有變化,顯示的數(shù)值可能會不準確。常見的手機傳感器有以下幾種:
加速度傳感器,又叫G-sensor,它會返回手機三軸方向的加速度數(shù)值,該數(shù)值包含地心引力的影響,單位是m/s2。
磁力傳感器,也可以簡稱為M-sensor,返回手機三軸方向所處磁場的強度,該數(shù)值的單位是微特斯拉,用uT表示。
方向傳感器,簡稱為O-sensor,返回三軸方向的角度數(shù)據(jù),數(shù)據(jù)的單位是度,為了獲取精確的數(shù)據(jù),它需要獲取G-sensor的數(shù)據(jù)來計算,否則就只能得到水平方向的角度數(shù)據(jù)。
光線感應傳感器,這個傳感器可以檢測實時的光線強度數(shù)據(jù),單位是lux,它的物理意義為照射到單位面積上光通量數(shù)值,磁傳感器主要用于Android系統(tǒng)的LCD自動調(diào)節(jié)亮度,可以根據(jù)實時光強來調(diào)整屏幕亮度。
2)SQLite數(shù)據(jù)庫
SQLite數(shù)據(jù)庫是一個嵌入式庫,它實現(xiàn)了零配置且無服務端和事務功能的SQL數(shù)據(jù)庫平臺引擎,被廣泛地使用。SQLite的單線程讀寫性能可以和MySQL相比,并且還能保證ACID性。它的存儲后端是基于Btree完成的,且多個連接可以并發(fā)操作,但是在同一時刻只能允許一個寫連接存在。在硬盤上面數(shù)據(jù)庫和文件一一對應,在每個數(shù)據(jù)庫的文件頭部儲存有此數(shù)據(jù)庫的元信息,包括數(shù)據(jù)庫的版本,大小和Btree的根節(jié)點位置等。SQLite將每個數(shù)據(jù)庫以頁為單位進行分類來管理,每一頁默認為512字節(jié),也可以看做此硬盤的sector大小。
3)百度地圖API
百度地圖API[13-14]是為百度開發(fā)者所免費提供的基于百度地圖應用的一套數(shù)據(jù)接口,它有著JavaScript API版本,Web 服務 API版本、Android SDK、iOS SDK、地圖定位SDK、車聯(lián)網(wǎng)API及LBS云等多種版本,來適應各種場合需求,它能提供基本的地圖展現(xiàn)功能及搜索定位功能、逆/地理編碼功能、路線策劃功能、LBS云存儲功能和檢索等功能,不僅適用于PC端也能在移動端、服務器等多種設備上適用,能在多種操作系統(tǒng)下完成地圖應用開發(fā)。
本軟件使用的是百度移動版地圖SDK其中的Android版[15],為移動手機的地圖應用開發(fā)提供基本地圖搜索與定位等服務。在使用該套SDK之前,需要先申請百度秘鑰。
2.2 具體實現(xiàn)方法
軟件在Android Studio中的結構如圖3所示。
圖3 健身輔助程序結構圖
主要的目錄為:①assets目錄:存放健身指導文件;②about目錄:存放健身軟件介紹的代碼;③inside目錄:存放室內(nèi)活動相關的代碼;④menu目錄:存放菜單界面及引導界面的代碼;⑤outdoor目錄:存放戶外活動相關的代碼;⑥setting目錄:存放設置相關的代碼;⑦statistics目錄:存放數(shù)據(jù)統(tǒng)計相關的代碼;⑧db目錄:存放數(shù)據(jù)庫架構及查詢代碼;⑨listener目錄:存放自定義接口代碼;⑩tools目錄:存放工具類(如計時器等)相關代碼。
1)手機傳感器核心代碼
要想在軟件中使用手機傳感器,首先得在代碼中對傳感器新建與注冊,這里以加速度傳感器檢測跳繩運動為例,TYPE_ACCELEROMETER就是代表的加速度傳感器類型,SENSOR_DELAY_NORMAL是指的傳感器靈敏級別,這里使用普通級別就夠了,也有更高級別的,如應用在游戲里的就得提高級別。
sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
準備好了傳感器就可以對加速度檢測了。這里需要對傳感器的監(jiān)聽代碼重寫,x_value等3個參數(shù)就是獲取到的手機3個方向的加速度,獲取到加速度成功時,需要將數(shù)值與設置的臨界值比較,如果大于臨界值則判斷為跳繩跳了一次,同時用Textview顯示出來,并播放聲音來提醒用戶,這樣即使手機放在口袋里也能很方便的使用軟件。
2)SQLite數(shù)據(jù)庫核心代碼
需要創(chuàng)建SQLite數(shù)據(jù)庫時,要用到SQLiteOpen Helper類,新建DatabaseHelper繼承SQLiteOpenHelper,創(chuàng)建幾個常量DATABASE_NAME代表的是數(shù)據(jù)庫名字,DATABASE_VERSION代表的是數(shù)據(jù)庫版本。這些參數(shù)會多次出現(xiàn),最好事先寫好。
private static final String DATABASE_NAME="com.sport_lite.db";//數(shù)據(jù)庫名字
private static final int DATABASE_VERSION=1;//數(shù)據(jù)庫版本
DatabaseHelper類的onCreate方法需要重寫來加入創(chuàng)建新的數(shù)據(jù)表,db.execSQL是數(shù)據(jù)庫命令,create table treadmill代表數(shù)據(jù)庫新建一個叫做treadmill的數(shù)據(jù)表,后面跟著的都是表內(nèi)的參數(shù)名,這里以text的形式儲存下來。
此應用運用了ContentProvider來進行數(shù)據(jù)共享,主要用來讀取文件和讀取數(shù)據(jù)庫內(nèi)容,新建DatabaseProvider繼承ContentProvider類,重寫onCreate方法,在里面新建Database Helper類,這樣就可以將應用的數(shù)據(jù)庫共享獲取了。為了方便查詢數(shù)據(jù),運用UriMatcher來匹配數(shù)據(jù)表路徑,這里只添加兩條,分別代表查詢數(shù)據(jù)表和查詢其他。
urimatcher = new UriMatcher(UriMatcher.NO_MATCH);
urimatcher.addURI(AUTHORITY,"querytable",QUERY_TABLE);
urimatcher.addURI(AUTHORITY, "queryother",QUERY_OTHER);
3)百度地圖API核心代碼
需要調(diào)用百度地圖接口時,首先需要在百度平臺上申請秘鑰,將其寫入AndroidManifest.xml,這樣才能在開啟GPS時調(diào)出百度地圖,
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="********************"/>
在程序中registerLocationListener是注冊地址監(jiān)聽,調(diào)用setOpenGps來自動開啟GPS定位,利用setScanSpan來設置掃描間隔時間。利用百度地圖獲取到的地址格式LatLng不能直接使用,需要調(diào)用百度地圖Jar包中的方法DistanceUtil來解析換算。經(jīng)過換算以后得到移動的距離,最后再以此為依據(jù)計算運動消耗等數(shù)據(jù)。
準備一款帶有傳感器與GPS功能的智能Android手機,安裝完此應用的軟件的APK文件,顯示需要網(wǎng)絡定位等授權時,點擊確認授權,否則程序會無法定位與讀寫數(shù)據(jù)。點擊進入程序界面,在設置完個人參數(shù)后(也可以不設置參數(shù)而使用默認值)選擇某一項健身運動進入相應的檢測界面,將手機放好,做好運動準備。
點擊界面上的開始按鈕,開始運動(此處以仰臥起坐為例),當做完一個仰臥起坐后,能聽到手機發(fā)出提示聲,并看到界面上的運動數(shù)值增加了,完成若干仰臥起坐后點擊完成按鈕??杀4孢\動數(shù)據(jù),如圖4所示。
確保手機GPS功能正常,點擊界面上的戶外跑步運動,看到自己所在位置的地圖,且自動以自己為中心定位好了,移動自己所處位置幾十米后,可以看到地圖上代表自己的原點更新了位置,切換到旁邊的數(shù)據(jù)頁面可以看到跑步距離增加了,如圖5所示。
進入查詢界面,輸入今天的日期與相應的運動項目后可以查到剛剛試驗的運動數(shù)據(jù),以條形圖顯示出來,切換界面后也能以詳細信息表顯示出來。
圖4 健身計數(shù)示意圖
圖5 戶外跑步地圖顯示
該目前此軟件在某些應用平臺上已經(jīng)登錄,可供用戶下載,有些許下載量。雖限于推廣力度,知名程度等方面限制,使用的用戶量增長有些緩慢,不過軟件的新穎性,實用性已經(jīng)可以得到驗證。利用這款軟件,即使用戶獨自在家也可以得到屬于自己的運動輔助。除開基本的運動檢測能力,它的數(shù)據(jù)顯示功能也可以利用展示數(shù)據(jù),形成習慣的形式幫助用戶堅持健身。在健身知識界面也有這相應的知識輔導,幫助用戶科學健身。
現(xiàn)在軟件還處于測試版本,或多或少存在一些BUG等待修繕。但我還是相信此軟件能為用戶帶來方便與健康的。
[1]馬越,閆慶旭.Android的架構與應用[D].北京:中國地質(zhì)大學(北京),2008.
[2]張娜,李白萍.Android系統(tǒng)架構研究與應用[D].西安:西安科技大學,2013.
[3]曾健平,邵艷潔.Android系統(tǒng)架構及應用程序開發(fā)研究[J].微計算機信息,2011(9):53-57.
[4]吳想想,宋茂強.基于Android平臺軟件開發(fā)方法的研究與應用[D].北京:北京郵電大學,2011.
[5]李文洋,王生生.基于智能手機傳感器的行為識別算法研究[D].長春:吉林大學,2014.
[6]陳國良,張言哲,楊洲.一種基于手機傳感器自相關分析的計步器實現(xiàn)方法[J].中國慣性技術學報, 2014(6):213-218.
[7]胡龍,王佳昊.基于智能手機的用戶行為識別技術研究與應用[D].成都:電子科技大學,2015.
[8]尹邦杰,黃曉瑩.淺析Android手機傳感器機制及應用設計舉例[J].計算機光盤軟件與應用,2013(5):86-91.
[9]李晨,梁正友.基于手機加速度傳感器的人體監(jiān)控系統(tǒng)研制[D].南寧:廣西大學,2015.
[10]杜國祥,石俊杰.SQLite嵌入式數(shù)據(jù)庫的應用[J].電腦編程技巧與維護,2010(14):33-38.
[11]馬獲蕾,湯海鳳.Android系統(tǒng)中SQLite數(shù)據(jù)庫的研究[J].電腦知識與技術,2013(28):106-114.
[12]黃東,劉蓉.基于SQLite的移動嵌入式數(shù)據(jù)庫同步系統(tǒng)的研究和開發(fā) [D].武漢:華中師范大學,2009.
[13]鄭偉,李全虎.基于Android的百度地圖車輛定位系統(tǒng)設計與實現(xiàn) [D].呼和浩特:內(nèi)蒙古大學,2014.
[14]施連敏,蓋之華.基于Android的百度地圖應用的搭建[J].技術與市場, 2014(12):74-80.
[15]朱根榮.百度地圖API應用數(shù)例[J].電腦編程技巧與維護, 2013(23):124-131.
The application of Android mobile phone sensor in the field of fitness exercise
HUANG Zhuo-xun1,GUO Xiang-nan2
(1.Wuhan Research Institute of Posts and Telecommunications,Wuhan 430074,China; 2.Fiberhome Telecommunication Technologies Co..LTD,Wuhan 430074, China)
In order to meet the growing public fitness needs,Consider the situation that smart phones have very high penetration rate lately,putting forward an application using Android phone sensors to monitor,norms and manage user's fitness sport.The application develope based on the Android system,the application layer,mainly using mobile phone of the acceleration sensor,orientation sensor,brightness sensor and so on,to manage exercises like sit ups,plate motion,running and so on.The application shows that this method can make the exercise more scientific and precise,it plays a positive role in the fitness of the user.
Android; smart phone; sensor monitoring; fitness exercise
TN87
:A
:1674-6236(2017)15-0045-06
2016-07-23稿件編號:201607164
黃卓勛(1991—),男,湖北武漢人,碩士研究生。研究方向:通信與信息系統(tǒng)、計算機軟件。