[發(fā)明專利]一種基于Android平臺的運動數(shù)據(jù)統(tǒng)計系統(tǒng)和方法有效
| 申請?zhí)枺?/td> | 201710407199.3 | 申請日: | 2017-06-02 |
| 公開(公告)號: | CN108984562B | 公開(公告)日: | 2022-03-08 |
| 發(fā)明(設計)人: | 彭?;吳兆強 | 申請(專利權)人: | 四川理工學院 |
| 主分類號: | G06F16/29 | 分類號: | G06F16/29;G06F16/22;G06F16/248;G06F16/25;G06F9/448;H04W4/02;H04W4/14;H04L67/025;H04L67/52;H04L9/40;G01C22/00 |
| 代理公司: | 北京立成智業(yè)專利代理事務所(普通合伙) 11310 | 代理人: | 張江涵 |
| 地址: | 643000 四*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 android 平臺 運動 數(shù)據(jù) 統(tǒng)計 系統(tǒng) 方法 | ||
1.一種基于Android平臺的運動數(shù)據(jù)統(tǒng)計系統(tǒng),其特征在于,包括:
軌跡繪制模塊,用于根據(jù)計步結果調(diào)用高德地圖繪制出用戶的運動軌跡;所述軌跡繪制模塊執(zhí)行以下步驟:
初始化步驟:
步驟21、利用Android Studio,在Terminal中輸入keytool–list–keystorekeystore.jks,以獲取sha1值;
步驟22、利用獲取的Sha1值在高德地圖控制臺添加key值以獲取高德地圖開發(fā)的APIkey參數(shù);
步驟23、在系統(tǒng)中添加并加載以下依賴包:
地圖jar包:Android_Map_V2.0.4.jar
定位jar包:MapApiLocation.jar
搜索jar包:MapApiSearch.jar;三個jar包,即:地圖jar包、定位jar包及搜索jar包;將jar包作為項目的依賴包使用,需要在gradle文件中設置依賴語句:
步驟24、將獲取的API key參數(shù)配置到系統(tǒng)的AndroidManifest.xml文件中并進行配置;
運動軌跡繪制步驟:
步驟31、初始化高德地圖設置,并開啟定位;判斷定位是否成功,如果否則步驟結束;
步驟32、調(diào)用回調(diào)函數(shù)onLocationChanged()返回AMapLocation對象,使用AMapLocation對象的getXXX()方法獲取到定位參數(shù),所述定位參數(shù)包括:經(jīng)緯度、地址信息、錯誤碼;
步驟32、利用連續(xù)兩次定位的經(jīng)緯度生成移動軌跡,包括:
mAMap.addPolyline(mPolylineOptions).add(mLatLngList.get(k-1),mLatLngList.get(k)).color(Color.BLACK));
其中,mAMap為高德地圖的MapView對象,用來顯示地圖界面;color()方法用來設置線段顏色;add()方法用來在地圖上繪制兩點之間的線段,接收參數(shù)為LatLng對象;代碼中mLatLngList為存儲LatLng型數(shù)據(jù)的集合,mLatLngList.get(k-1)表示起始點,mLatLngList.get(k)表示結束點;addPolyline()方法用來將Polyline對象添加到地圖上,接收參數(shù)為PolylineOptions對象,PolylineOptions對象可設置線段的寬度、顏色信息;
在每次繪制線段之后調(diào)用postInvalidate()方法刷新地圖以顯示出繪制的運動軌跡;
步驟33、當用戶結束運動時,調(diào)用stopLocation()方法結束定位,同時停止運動軌跡的繪制;并將繪制的全部運動軌跡進行存儲;
所述系統(tǒng)還包括個人中心,所述個人中心連接所述軌跡繪制模塊以接收并存儲所述軌跡繪制模塊的數(shù)據(jù),其中所述個人中心包括:注冊模塊、登錄模塊、數(shù)據(jù)交互模塊:
所述注冊模塊執(zhí)行以下操作:發(fā)送驗證碼操作、注冊操作:
其中送驗證碼操作包括:接收APP發(fā)送的驗證碼獲取請求,使用隨機數(shù)函數(shù)生成一個六位數(shù)驗證碼,生成的驗證碼在反饋給客戶端APP做本地保存的同時,調(diào)用短信發(fā)送程序給用戶發(fā)送一條驗證碼短信;
其中注冊操作包括:注冊操作采用Spring中注解方式完成數(shù)據(jù)的請求與響應,代碼具體包括:
@RequestMapping(value=/api/register/users,method=RequestMethod.POST)
public ResponseEntityRespregisterMember(@RequestBody User user){
ResponseEntityRespresponseEntity=userService.register(user);
return responseEntity;}
其中,Resp為響應體的bean類,User為用于解析請求體json數(shù)據(jù)的bean類,“value”即接口;Register()函數(shù)即為注冊流程處理函數(shù),其首先驗證手機號;如果傳遞過來的手機號為空,則返回自定義錯誤碼600,提示內(nèi)容為“手機號缺失”;如果發(fā)現(xiàn)在數(shù)據(jù)庫中存在此手機號,則說明此手機號已注冊過不可再注冊,返回錯誤碼401,提示內(nèi)容為“此手機號已注冊”;如果手機號不為空也并未被注冊過,則將用戶信息保存到數(shù)據(jù)庫中,保存成功后設置返回碼為200,通知客戶端已注冊;
其中登錄模塊的代碼如下:
@RequestMapping(value=/api/login,method=RequestMethod.POST)
public@ResponseEntity Resp userLogin(@RequestBody User user){
return userService.userLogin(user);}
其中,userLogin()函數(shù)即為登錄流程處理函數(shù),傳入?yún)?shù)RequestBody攜帶Json數(shù)據(jù);登錄程序會將APP傳遞過來的user name和password依次放到數(shù)據(jù)庫中進行查詢;如果username不存在則返回錯誤碼400,提示信息設置為“賬號不存在”;如果user name存在而password不正確,同樣返回錯誤碼400,而提示信息則設置為“密碼錯誤”;如果兩者均正確則設置返回碼為200,提示用戶登錄成功;
其中數(shù)據(jù)交互模塊包括:API接口;
其中API接口用于實現(xiàn)與web server交互的功能以使APP用這些接口訪問遠端服務器;接口使用的通訊協(xié)議為http1.1,數(shù)據(jù)請求方式為GET與POST,Request host定義為“http://www.freeruning.com:8080”,response數(shù)據(jù)格式為Json,對應的bean文件為“Resp.java”,基本格式定義如下:
其中API接口包括:個人資料獲取接口、個人資料修改接口、個人數(shù)據(jù)管理接口
其中個人中心接口的個人資料獲取流程的代碼如下:
@RequestMapping(value=/api/user/{user_id}/get,method=RequestMethod.GET)
public ResponseEntityRespgetUserInfo(@PathVariable String user_id){
return userService.getUserInfo(user_id);}
其中個人資料的獲取接口為“/api/user/{user_id}/get”,請求方式為GET;具體數(shù)據(jù)獲取函數(shù)為getUserInfo(),該函數(shù)傳入?yún)?shù)為String型數(shù)據(jù)user_id;
其中個人資料獲取程序首先連接數(shù)據(jù)庫,然后查詢user_info table;如果該表中存在傳入的user_id,則將該user_id下的所有信息取出,反饋給用戶,如果該表中不存在傳入的user_id,則返回錯誤碼400,提示信息設置為“該賬戶信息不存在”;
其中個人資料修改接口的代碼如下:
@RequestMapping(value=/api/user/{user_id}/up,method=RequestMethod.POST)
public ResponseEntityRespuserUpInfo(@PathVariable String user_id,
@RequestBody JSONObject upInfo){
return userService.userUpInfo(user_id,upInfo);}
其中,個人資料修改接口為“/api/user/{user_id}/up”,請求方式為POST;RequestBody攜帶數(shù)據(jù)為Json數(shù)據(jù);實現(xiàn)函數(shù)為userUpInfo(),傳入?yún)?shù)為user_id和upInfo,user_id數(shù)據(jù)類型為String,upInfo數(shù)據(jù)類型為JSONObject;
其中個人資料修改接口在接收到客戶端發(fā)送來的POST請求后,首先將Request Body中的Json數(shù)據(jù)使用JSONObject工具類進行解析;解析后的數(shù)據(jù)傳遞到userBean類中,然后將userBean作為參數(shù)傳遞到數(shù)據(jù)庫保存函數(shù)save(),完成數(shù)據(jù)保存工作;最后個人資料修改程序返回ResponseEntity類,告訴客戶端APP數(shù)據(jù)修改成功;
其中個人數(shù)據(jù)管理接口包括:個人數(shù)據(jù)上傳接口、個人數(shù)據(jù)下載接口:
個人數(shù)據(jù)上傳流程的代碼如下:
@RequestMapping(value=/api/user/data/{user_id}/up/{flag},
method=RequestMethod.POST)
public ResponseEntityRespupdata(@RequestBody JSONObject jsonData,
@PathVariable String user_id,
@PathVariable String flag)
{return userService.updata(jsonData,user_id,flag);}
個人數(shù)據(jù)上傳接口為“/api/user/data/{user_id}/up/{flag}”;其中,字段“flag”為數(shù)據(jù)類型判斷字段,數(shù)據(jù)上傳實現(xiàn)函數(shù)為updata(),傳入?yún)?shù)為“jsonData”,“user_id”及“flag”;
其中個人數(shù)據(jù)上傳程序在接收到客戶端URL之后,首先對URL進行分析,從中提取出“user_id”及“flag”參數(shù);“user_id”是唯一標識用戶信息的字段,“flag”參數(shù)用來確定上傳數(shù)據(jù)的類型;若“flag”為“0”,則代表上傳天氣信息;若“flag”為“1”,則代表上傳生理參數(shù);若“flag”為“2”,則代表上傳運動數(shù)據(jù);若“flag”為“3”,則代表上傳所有數(shù)據(jù);若“flag”的值不符合以上四種情況,則返回錯誤碼400,表示請求錯誤;在確定好上傳數(shù)據(jù)的類型之后,通過相應的bean解析對應Request Body中Json數(shù)據(jù),然后調(diào)用dbDao類的save()函數(shù),將解析好的數(shù)據(jù)存入對應table中;最后,返回ResponseEntiy類,通知客戶端APP數(shù)據(jù)已存儲成功;
其中個人數(shù)據(jù)下載接口的代碼如下:
@RequestMapping(value=/api/user/data/{user_id}/down/{flag},
method=RequestMethod.GET)
public ResponseEntityRespdownData(@PathVariable String user_id,
@PathVariable String flag)
{return userService.downData(user_id,flag);}
個人數(shù)據(jù)下載接口為“/api/user/data/{user_id}/down/{flag}”,實現(xiàn)函數(shù)為downData(),傳入?yún)?shù)為“user_id”及“flag”;
其中個人數(shù)據(jù)下載接口在獲取到客戶端GET請求之后,首先使用“flag”參數(shù)判斷所要查詢的數(shù)據(jù)類型,然后通過“user_id”查找出該用戶相關數(shù)據(jù),并將數(shù)據(jù)以map形式傳入Resp bean中;最后返回ResponseEntity類,將數(shù)據(jù)傳送到客戶端;
其中,該基于Android平臺的運動數(shù)據(jù)統(tǒng)計系統(tǒng)還包括:
計步模塊,用于根據(jù)三軸加速度計獲取的數(shù)據(jù)進行計步,具體包括:
步驟11、根據(jù)當前的海拔、地磁場強度,對接收到的三軸加速度傳感器發(fā)送來的持續(xù)的計步電路輸出信號進行數(shù)據(jù)修正;由于使用者的跑步海拔、所處地方地磁強度的不同,會對加速度的測量造成一定的影響;為消除以上因素引起的誤差,需要通過以下步驟進行數(shù)據(jù)修正:
通過公式(1)對三軸加速度傳感器發(fā)送來的持續(xù)的計步電路輸出信號中X、Y、Z三個軸上的加速度值做了修正補償,修正公式如下:
Aacc=Ccompsation+Vvalues×K (1)
其中,Aacc為修正值,Ccompsation為加速度補償量,Vvalues為某一方向上的加速度值,K為比例系數(shù);
其中Ccompsation由海拔高度決定,當海拔在2000米以下時設定補償量為245;當海拔在2000米到4000米范圍時設定補償量為255;當海拔在4000米以上時設定補償量為265;
其中比例系數(shù)K為控制信號縮放比的關鍵量,可以通過以下的公式(2)計算:
其中Mmax為地球表面最大磁場強度;由公式(2)可以看出比例系數(shù)K與加速度補償量Ccompsation成正比;
步驟12、通過以下的公式(3)計算加速度平均值mAvr
mAvr=(Aaccx+Aaccy+Aaccz)/3 (3)
其中Aaccx為X軸上的加速度分量,Aaccy為Y軸上的加速度分量,Aaccz為Z軸上的加速度分量;
步驟13、將加速度平均值mAvr繪制的波形圖記為函數(shù)F(t),并將被測點記作F(t0),將被測點的前兩個值分別定義為F(t1)、F(t2);然后計算F(t1)與F(t2)差值,記作Δ1;計算F(t1)與F(t0)差值,記作Δ2;
如果Δ1、Δ2異號則認為F(t1)為拐點,否則認為F(t1)不為拐點;若為極值點則將極值點存入數(shù)組mExtremums[]中,并進入步驟14;其中,F(xiàn)(t1)也稱為F(t前);
其中步驟13中Δ1、Δ2異號則認為F(t1)為拐點是指,如果Δ1、Δ2一個為正、一個為負,則可以說明其中F(t1)為一個極值點;采用該步驟可以找到波形圖中的所有極值點;
步驟14、獲取當前的極值點Ek以及前一極值點Ek-1,并計算相鄰波峰波谷之間的差值絕對值|Δ|
|Δ|=|Ek-Ek-1| (4)
其中,|Δ|為相鄰的兩個極值點之間的差值的絕對值,也是識別運動步伐的判斷依據(jù),Ek為本次測量出的拐點,用數(shù)組mExtremums[k]表示,Ek-1為記錄的上一個極值點,用數(shù)組mExtremums[k-1]表示;
步驟15、根據(jù)步驟14獲取的極值點之間的差值絕對值|Δ|,判斷相鄰的兩個極值點之間的差值的絕對值|Δ|是否滿足計步條件;|Δ|需要滿足五個條件才能使計步程序記錄一步,且記上次計算值為|Δ|1;五個條件具體包括:
(1)、識別區(qū)間的確定條件;當前值|Δ|大于閥值的部分為運動識別區(qū),小于閥值的部分為非識別區(qū);閥值即為可穿戴設備的計步電路的靈敏度,靈敏度過高或高低均會給計步造成較大誤差;
(2)、上次計算值|Δ|1是否合理的判斷條件;若上次計算值|Δ|1相比當前值|Δ|太小;其中|Δ|1<|Δ|/4,則認為上一次波動為高頻干擾,上一步不記為一步;否則認為|Δ|1合理數(shù)據(jù);
(3)、當前值|Δ|是否合理的判斷條件;在通過第2個條件判定上次計算值|Δ|1有效的情況下,進一步判斷當前值|Δ|是否合理;若當前|Δ|大于三分之二倍的|Δ|1時,則認為當前值|Δ|為合理數(shù)據(jù),進入下一步判斷;若當前值|Δ|過小,則認為本次波動為抖動干擾,不計為一步;
(4)、波谷判斷;由人體的運動規(guī)律可知,完成邁步的動作不可能出現(xiàn)在波峰階段;所以如果的滿足條件的拐點為波峰數(shù)據(jù),則舍棄;如果為波谷數(shù)據(jù)則進入下一個判斷條件;
(5)、時間間隔判斷條件;由于人體的最快運動頻率為50Hz,即兩步之間的時間間隔最小為0.2s,因此當前值|Δ|與上次計算值|Δ|1之間的時間間隔小于0.2s,則該當前值|Δ|為高頻噪聲干擾,不計為一步;
步驟16、如果當前值|Δ|滿足步驟15的五個條件時,當前值|Δ|可以記為一步。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于四川理工學院,未經(jīng)四川理工學院許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業(yè)授權和技術合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710407199.3/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 一種Android設備之間遠程桌面控制的方法
- 一種Android程序的執(zhí)行路徑的還原方法
- 基于ANCS協(xié)議兼容多平臺的通知消息獲取方法
- 基于字節(jié)碼插樁的Android程序監(jiān)控系統(tǒng)及方法
- 一種減少Android設備功耗的優(yōu)化方法及裝置
- 一種縮短無屏Android設備開機啟動時間的設置方法
- 一種基于Android雙系統(tǒng)的系統(tǒng)間通知同步方法
- 基于移動操作系統(tǒng)的Android兼容層實現(xiàn)方法和系統(tǒng)
- 一種Android智能設備APK安全管控方法
- 一種應用程序開發(fā)中創(chuàng)建Android庫模塊依賴關系的方法及裝置





