







摘" 要:隨著生活成本的提高和工作壓力的增大,越來越多的人們意識到了運(yùn)動的重要性。所設(shè)計的運(yùn)動管理系統(tǒng)APP基于Android平臺開發(fā)應(yīng)用程序,采用SQLite數(shù)據(jù)庫存儲用戶的基本信息,同時使用Service服務(wù)獲取天氣信息,并結(jié)合用戶當(dāng)下的身體狀態(tài),有效地制定個性運(yùn)動計劃,實(shí)現(xiàn)運(yùn)動目標(biāo)。通過測試,該APP具有良好的穩(wěn)定性和可靠性,可為人們?nèi)粘e憻捥峁┻m合的運(yùn)動方案,從而提高身體素質(zhì)。
關(guān)鍵詞:Android平臺;運(yùn)動管理;系統(tǒng);軟件編程
中圖分類號:TP311.5" 文獻(xiàn)標(biāo)識碼:A" 文章編號:2096-4706(2024)21-0083-05
Design and Implementation of Exercise Management System APP Based on Android
YAO Jiaxu
(Shandong Huayu University of Technology, Dezhou" 253034, China)
Abstract: With the increasing living cost and working pressure, more and more people are aware of the importance of exercise. The designed exercise management system APP is based on the Android platform to develop application, and uses SQLite database to store the basic information of users. At the same time, it uses the Service to obtain weather information, combines with users' current physical state, and effectively develops a personalized sports plan to achieve exercise goals. Through testing, this APP has good stability and reliability, which can provide a suitable exercise program for people's daily exercise, so as to improve their physical quality.
Keywords: Android platform; exercise management; system; software programming
0" 引" 言
計算機(jī)技術(shù)的飛速發(fā)展,讓各行各業(yè)的效率和方式得到了極大的提升和改變,人們生活中的各個方面也在互聯(lián)網(wǎng)的影響下發(fā)生了變化,運(yùn)動管理系統(tǒng)APP也迅速融入大眾的日常生活中,方便了用戶根據(jù)自身情況制定個性運(yùn)動計劃,提高個人的身體素質(zhì)。本文使用Android設(shè)計運(yùn)動管理系統(tǒng),采用超文本傳輸協(xié)議使數(shù)據(jù)進(jìn)行傳輸,基于Android操作系統(tǒng)平臺的智能手機(jī)為客戶端,與作為工作站的服務(wù)器端實(shí)現(xiàn)數(shù)據(jù)操作。用戶通過手機(jī)客戶端進(jìn)行信息的注冊、添加運(yùn)動計劃、查看步數(shù)記錄、監(jiān)測心率等,并根據(jù)得到的數(shù)據(jù)進(jìn)行運(yùn)動分析。本系統(tǒng)是在Windows 10操作系統(tǒng)下,使用AndroidStudio開發(fā)工具,選擇C/S結(jié)構(gòu)實(shí)現(xiàn)的。
1" 需求分析及功能設(shè)計
為了滿足個性、便利地幫助用戶制定運(yùn)動計劃和管理用戶信息的要求,運(yùn)動管理系統(tǒng)APP主要包括4個功能界面:運(yùn)動界面,發(fā)現(xiàn)界面,心率界面,我的界面。運(yùn)動界面主要顯示天氣信息和運(yùn)動信息;發(fā)現(xiàn)界面用來添加運(yùn)動任務(wù);心率界面用來測試心率;我的界面用來更改個人信息、查看運(yùn)動計劃、運(yùn)動歷史等內(nèi)容,具體的功能模塊圖如圖1所示。
2" 客戶端/服務(wù)器模式簡介
客戶端/服務(wù)器模式,即C/S模式(Client/Server),是計算機(jī)軟件協(xié)同工作的一種模式。C/S模式是一種常見的軟件應(yīng)用程序架構(gòu),有兩個主要組件:客戶端和服務(wù)器。客戶端是向用戶提供界面并與用戶直接交云的應(yīng)用程序部分,而服務(wù)器則在網(wǎng)絡(luò)的另一端運(yùn)行,負(fù)責(zé)處理來自客戶端的請求,執(zhí)行操作,并將結(jié)果返回給客戶端。系統(tǒng)技術(shù)架構(gòu)圖如圖2所示。
在這種模式中,客戶端和服務(wù)器通常通過網(wǎng)絡(luò)連接進(jìn)行通信,它們執(zhí)行的任務(wù)和所承擔(dān)的責(zé)任是不同的。服務(wù)器通常配置有必要的資源和服務(wù),以支持一個或多個客戶端的需求。這種分工允許客戶端和服務(wù)器獨(dú)立地進(jìn)行優(yōu)化和升級,提高了整個系統(tǒng)的效率和可擴(kuò)展性。
3" 系統(tǒng)設(shè)計及功能實(shí)現(xiàn)
為確保APP的使用率以及穩(wěn)定性,在開展各項具體模塊設(shè)計之前,首先根據(jù)用戶的需求進(jìn)行分析,以確保APP的每個界面設(shè)計更好地融入需求,同時APP使用了簡潔易懂的控件,實(shí)現(xiàn)了便捷、舒適、友好的宗旨[1]。
3.1" 注冊界面功能
運(yùn)動管理系統(tǒng)APP是一款基于AndroidStudio內(nèi)置虛擬機(jī)運(yùn)行的程序[2]。程序運(yùn)行后,首先進(jìn)入APP注冊界面,該界面實(shí)現(xiàn)用戶使用APP前的個人信息注冊,如圖3所示。個人信息注冊完成后,點(diǎn)擊下一步,繼續(xù)完善個人體重與步長設(shè)置,設(shè)置完成后用戶注冊結(jié)束,程序進(jìn)入主頁面,如圖4所示。注冊界面用于用戶第一次使用系統(tǒng),注冊完成后,點(diǎn)擊制定計劃按鈕,該按鈕控件實(shí)現(xiàn)OnClickListener接口并重寫onClick()方法,在此方法中通過調(diào)用getText()方法獲取用戶輸入的注冊信息[3],同時調(diào)用網(wǎng)絡(luò)接口類將用戶的信息發(fā)送給服務(wù)器,由服務(wù)器端將處理完成的數(shù)據(jù)插入數(shù)據(jù)庫對應(yīng)的表中。
由于SQLite的簡單性、靈活性和高效性,它廣泛應(yīng)用于各種移動應(yīng)用程序中。移動應(yīng)用程序通常需要處理各種類型的數(shù)據(jù),例如用戶配置信息、日志數(shù)據(jù)、位置數(shù)據(jù)等[4]。SQLite的類型系統(tǒng)能夠滿足這些需求,并提供高效的數(shù)據(jù)存儲和查詢功能,這也是Android移動設(shè)備采用SQLite數(shù)據(jù)庫的重要原因之一。客戶端實(shí)現(xiàn)注冊部分代碼如下:
public void onClick(View v) {
switch (v.getId()){
case R.id.boy: //男
gender_str = getResources().getString(R.string.boy);break;
case R.id.girl: //女
gender_str = getResources().getString(R.string.girl);break;
case R.id.input_birthday: //獲取生日信息
case R.id.input_height: //獲取身高信息
saveMessageOne();default:break;}//保存資料
3.2" 運(yùn)動界面功能
運(yùn)動界面是本系統(tǒng)的重點(diǎn)模塊,該界面主要展示用戶的運(yùn)動步數(shù)、運(yùn)動的總千米數(shù)等內(nèi)容,方便用戶及時調(diào)整自己的運(yùn)動進(jìn)度。如圖5所示,進(jìn)入該界面后,客戶端調(diào)用傳感器管理器,該管理器用來幫助手機(jī)注冊傳感器,同時設(shè)置傳感器的具體類型為重力傳感器(加速度傳感器)。重力傳感器的工作原理,主要是對方法onTransducerChanged()進(jìn)行回調(diào)重寫,回調(diào)時需要先設(shè)置一個定時服務(wù)喚醒傳感器監(jiān)聽器,用戶在運(yùn)動時監(jiān)聽器能夠感應(yīng)到參數(shù)的變化從而回調(diào)方法,進(jìn)而判斷手機(jī)在震動時的加速度是否大于某個臨界值[5],若滿足設(shè)定的條件,則進(jìn)行一次步數(shù)的記錄,并在數(shù)據(jù)界面進(jìn)行顯示。部分實(shí)現(xiàn)代碼如下:
public void onTransducerChanged(TransducerEvent e) {
detector = new StepDetector(this);//實(shí)例化傳感器對象
detector.walk = 1;//設(shè)置步數(shù)從一開始
// 獲取傳感器的服務(wù),初始化傳感器
mSensorManager=(SensorManager)this.getSystemService(SENSOR_SERVICE);
mSensorManager.registerListener(detector,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
totalstep++;// 步數(shù)的累加}}}
定位服務(wù)是統(tǒng)計運(yùn)動總千米數(shù)的關(guān)鍵,該功能主要是通過獲取實(shí)時地圖實(shí)現(xiàn)的。和手機(jī)傳感器一樣,初始化地圖需要重寫對應(yīng)的回調(diào)方法initLocation(),此方法是百度地圖檢測到手機(jī)發(fā)生位移后返回位移參數(shù)的具體過程[6],該過程需要設(shè)定發(fā)起定位請求的間隔時間大于等于1 000毫秒才是有效位移(定位結(jié)果坐標(biāo)系)。初始化完成后調(diào)用setOpenGps()方法設(shè)置打開GPS與GPS掃描頻率,若GPS開啟失敗,也可開啟網(wǎng)絡(luò)定位與離線定位,兩者的定位結(jié)果也是有效的,只需要在初始化定位方式時將上述兩種方式追加上即可實(shí)現(xiàn)。部分實(shí)現(xiàn)代碼如下:
private void initLocation(){
// 定位初始化
LocationClientOption opt = new Location-ClientOption();
opt.setCoorType(\"bd09ll\");//設(shè)置返回的定位結(jié)果坐標(biāo)系
int span=1000 * 10;
opt.setScanSpan(span);//設(shè)置請求的間隔大于等于1000毫秒
opt.setOpenGps(true);//設(shè)置是否啟動GPS
mLocationClient.setLocOption(opt);
mPlat = (MapView) view.findViewById(R.id.mPlat);//綁定地圖控件
return myView;//返回定位內(nèi)容
private StringBuffer s = 1;
s.append(\"網(wǎng)絡(luò)定位成功\");
s.append(\"離線定位成功\");}
3.3" 發(fā)現(xiàn)界面功能
發(fā)現(xiàn)界面的主要功能是讓用戶自主的添加運(yùn)動計劃,通過運(yùn)動計劃的添加,APP可以有效地提醒用戶進(jìn)行對應(yīng)的運(yùn)動練習(xí),如圖6所示。當(dāng)用戶選擇完運(yùn)動項目后,點(diǎn)擊添加新計劃,用戶還需設(shè)置所選擇運(yùn)動的開始時間和結(jié)束時間,以便APP準(zhǔn)確提醒用戶完成運(yùn)動鍛煉。如圖7所示。部分實(shí)現(xiàn)代碼如下:
final ContentValues values = new ContentValues();
//1.存入運(yùn)動類型
values.put(\"sport_type\" , type);
//2.存入運(yùn)動類型名稱
values.put(\"sport_name\" , title_name);
//3.存入開始年月日
values.put(\"start_year\" , start_year);
values.put(\"start_month\" , start_month);
values.put(\"start_day\" , start_day);
//4.存入結(jié)束年月日
values.put(\"stop_year\" , stop_year);
values.put(\"stop_month\" , stop_month);
values.put(\"stop_day\" , stop_day);
//5.存入設(shè)置的時間
values.put(\"set_time\", nowTime);
3.4" 心率界面功能
心率界面是本系統(tǒng)的核心模塊,主要功能是當(dāng)用戶完成運(yùn)動計劃后,移動終端通過調(diào)用硬件部分?jǐn)z像頭實(shí)時監(jiān)測用戶的心率變化,并采用XYSeries圖表繪制類實(shí)現(xiàn)心率曲線圖的繪制。首先在系統(tǒng)中引入Maven和JitPack的依賴[7],同時將界面中用來獲取與展示用戶心率的控件進(jìn)行綁定,當(dāng)用戶點(diǎn)擊心率測試開始按鈕,后置攝像頭開啟,將手指放在攝像頭處后,已完成綁定的按鈕控件響應(yīng)onClick()方法收集用戶的心率變化數(shù)據(jù),進(jìn)度條類ProgressBar會按照預(yù)先設(shè)定好的測試時間展示測試的進(jìn)度,該類類似于收集數(shù)據(jù)時所設(shè)定計時器的可視化控件,當(dāng)測試進(jìn)度條閉環(huán)后心率數(shù)據(jù)收集完成,隨后調(diào)用surfaceview()方法對數(shù)據(jù)進(jìn)行分析,以及調(diào)用setChartSettings()方法和setColor()方法設(shè)定圖像的展示與顏色,最后在工具類Utils中調(diào)用showChart()方法展示曲線圖。因?yàn)樵摴δ艿臄?shù)據(jù)是動態(tài)變化的,所以需要啟動線程實(shí)時刷新。心率測試效果如圖8所示。部分代碼如下:
private SurfaceView surview;//聲明圖表控件
surview = (SurfaceView) view.findViewById(R.id.surview);//綁定控件
XYSeries r = new XYSeries();//設(shè)置圖表中曲線本身的樣式
r.setLineWidth(1); //設(shè)置粗細(xì)
r.setChartSettings(1);設(shè)置顯示。
r.setColor(Color.RED);//設(shè)置紅色。
由于該功能需要通過程序操作移動終端調(diào)用攝像頭,因此需要提前給APP在配置文件AndroidManifest.xml中配置相應(yīng)的攝像頭使用權(quán)限。實(shí)現(xiàn)代碼如下:
lt;!-- 調(diào)用攝像頭權(quán)限 --gt;
lt;uses-feature android:name=\"android.hardware.camera\"/gt;
lt;uses-feature android:name=\"android.hardware.camera.autofocus\"/gt;
3.5" 我的界面功能
我的界面的是多個功能的匯總界面,主要包括運(yùn)動歷史界面、統(tǒng)計折線圖界面、食物熱量表界面、我的計劃界面,如圖9所示。運(yùn)動歷史界面為用戶展示了已完成的運(yùn)動計劃、累計運(yùn)動的天數(shù)、累計消耗的卡路里數(shù)等內(nèi)容,用戶通過當(dāng)前界面實(shí)時了解自己的運(yùn)動完成情況,如圖10所示。統(tǒng)計折線圖界面以圖表的形式為用戶記錄從開始運(yùn)動以來每天的步數(shù)變化,用戶可以根據(jù)展示的圖表記錄規(guī)劃每天的運(yùn)動步數(shù),如圖11所示。食物熱量表界面將服務(wù)器端傳回的食物數(shù)據(jù)進(jìn)行分類展示,用戶可以根據(jù)自己想了解的食物熱量[8],如圖12所示。點(diǎn)擊相應(yīng)的分類查看具體熱量信息,幫助自己在制定運(yùn)動計劃時選擇合適的食物組合,如圖13所示。我的計劃界面用來管理用戶在發(fā)現(xiàn)界面所添加的運(yùn)動計劃,用戶可以根據(jù)當(dāng)前的身體狀態(tài)修改或刪除已有計劃,如圖14所示。
4" 測試分析
4.1" 功能測試
測試APP的主要功能界面,包括用戶注冊與初始化界面、運(yùn)動界面、運(yùn)動計劃添加、心率測試、運(yùn)動管理、食物熱量顯示信息等,通過測試記錄的信息與結(jié)果顯示APP各功能界面均測試正常,用戶能夠便捷流暢的使用各項功能。
4.2" 安全測試
測試APP在使用過程中可能存在的安全漏洞和風(fēng)險,以保證用戶在使用APP時不會因?yàn)榘踩珕栴}導(dǎo)致APP的錯誤退出,同時有效地保護(hù)了用戶的信息與硬件設(shè)備調(diào)用時的安全性[9],測試結(jié)果顯示,APP采取了合理的安全措施,使數(shù)據(jù)得到有效保護(hù)。
4.3" 兼容性測試
測試APP在不同型號、版本的手機(jī)上的兼容性。包括CPU架構(gòu)、屏幕分辨率等方面[10]。測試結(jié)果顯示,APP在不同型號、不同版本的設(shè)備上都能正常運(yùn)行。
5" 結(jié)" 論
本文設(shè)計并實(shí)現(xiàn)了基于Android的運(yùn)動管理系統(tǒng)APP,運(yùn)用了客戶端/服務(wù)器端的架構(gòu)模式,用戶在手機(jī)客戶端操作的數(shù)據(jù)以及運(yùn)動參數(shù)會傳遞到服務(wù)器端進(jìn)行存儲。用戶不僅可以通過移動客戶端實(shí)時監(jiān)控自己的運(yùn)動指標(biāo),還可以查看自己的歷史運(yùn)動數(shù)據(jù),對比運(yùn)動數(shù)據(jù),改進(jìn)運(yùn)動方法,避免運(yùn)動過載或身體不適。
參考文獻(xiàn):
[1] 崔洪成,陳慶果.移動健身App用戶持續(xù)使用意愿研究 [J].首都體育學(xué)院學(xué)報,2020,32(1):75-81+96.
[2] 賈寧,李瑛達(dá).基于智能可穿戴設(shè)備的個性化健康監(jiān)管平臺的構(gòu)建 [J].計算機(jī)科學(xué),2019,46(S1):566-570.
[3] 李超.家庭式醫(yī)療健康監(jiān)護(hù)系統(tǒng)的研究與實(shí)現(xiàn) [D].成都:電子科技大學(xué),2020.
[4] 景子奇,鄒兆年.嵌入式數(shù)據(jù)庫SQLite上多版本并發(fā)控制的設(shè)計與實(shí)現(xiàn) [J].計算機(jī)應(yīng)用,2022,42(1):140-147.
[5] 王曉晨,付曉嬌.健身、社交、情感:運(yùn)動健身App網(wǎng)絡(luò)社群的互動儀式鏈 [J].沈陽體育學(xué)院學(xué)報,2022,41(3):64-70.
[6] 諶濤,謝徽音.基于KANO模型的健身類APP用戶滿意度實(shí)證研究 [J].設(shè)計,2020,33(11):38-41.
[7] 崔洪成.移動健身App使用意愿研究——基于技術(shù)準(zhǔn)備度與技術(shù)接受模型(TRAM) [J].中國體育科技,2022,58(6):104-113.
[8] 王翠萍.Android經(jīng)典項目開發(fā)實(shí)戰(zhàn) [M].北京:清華大學(xué)出版社,2015.
[9]朱華健,譚海波,趙赫,等.基于Android的健康管理信息系統(tǒng) [J].計算機(jī)系統(tǒng)應(yīng)用,2015,24(9):61-65.
[10] 何紅輝,關(guān)愛民.Android源碼設(shè)計模式解析與實(shí)戰(zhàn):第2版 [M].北京:北京人民郵電出版社,2020.
作者簡介:姚佳旭(1994—),女,漢族,山東德州人,工程師,本科,研究方向:軟件開發(fā)、數(shù)據(jù)庫應(yīng)用。
基金項目:山東華宇工學(xué)院教學(xué)改革研究項目(2022JG03)