freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android的便攜式健康監(jiān)測(cè)系統(tǒng)畢業(yè)論文(編輯修改稿)

2024-07-25 00:59 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 int pluse = ~data[1]。 // pluse = 0 pluse。 // pluse = pluse 1。 // pluse = pluse + 700。 // 接收的數(shù)據(jù)超過(guò)200,則將集合清0 if (() = 200) { ()。 } // 將接收到的數(shù)據(jù)加入集合 (pluse)。 // 如果讀寫(xiě)標(biāo)志為真,則將接收到的數(shù)據(jù)寫(xiě)入文件 if (saveFlag) { try { if (!()) ()。 FileWriter fw = new FileWriter(dataFile, true)。 ((pluse) + \r\n)。 ()。 } catch (IOException e) { ()。 } } }}// 判斷BPM的方法體 protected static void pluseSure() { // 調(diào)用此方法時(shí)的時(shí)間 long curTime = ()。 // 將每次調(diào)用此方法的時(shí)間加入時(shí)間集合 (curTime)。 int timeListSize = ()。 // 求得此時(shí)與初始時(shí)刻所經(jīng)歷的時(shí)間間隔 durTime = curTime (0)。 // 求得BPM Bpp = (float) (timeListSize 1) * 1000 / durTime。 Bpm = (int) (Bpp * 60)。 String bpmStr = (Bpm)。 // 判斷心率曲線是否穩(wěn)定 if (timeListSize 4) { long tmpTime = curTime (timeListSize 4)。 // 如果連續(xù)4個(gè)心率曲線上揚(yáng)的時(shí)間不在正常范圍內(nèi),則將時(shí)間集合清0,否則顯示 if (tmpTime 3000 || tmpTime 1000) { ()。 ()。 } else { (bpmStr)。 } }}由于類中有大量數(shù)據(jù)傳遞,所以使用了List集合作為數(shù)據(jù)的存儲(chǔ)空間,可以從代碼中看出,接收到的數(shù)據(jù)都存入dataList,而時(shí)間值存入了timeList。在下面的繪圖模塊中可以看到一個(gè)判斷條件:當(dāng)波形數(shù)據(jù)上揚(yáng)(即前一個(gè)數(shù)據(jù)小于0,后一個(gè)大于0,0是判定界限)時(shí),就調(diào)用判斷BPM的方法體。數(shù)據(jù)存入文件時(shí),為了方便二次調(diào)用和查看,在每個(gè)數(shù)據(jù)后面追加了換行符,結(jié)果就是每個(gè)數(shù)據(jù)會(huì)在文件中單獨(dú)成行。判斷BPM的前提是在脈搏較為穩(wěn)定的情況下,所以在計(jì)算之前加了一個(gè)判定脈搏是否穩(wěn)定的算法,即心率上揚(yáng)之間的間隔穩(wěn)定在一定范圍之內(nèi)才開(kāi)始真正計(jì)算BPM并顯示,此處是檢測(cè)到4個(gè)上揚(yáng)波形在合理范圍之內(nèi)后就由相互之間的時(shí)間間隔除上揚(yáng)波形的個(gè)數(shù)(即跳動(dòng)次數(shù))再擴(kuò)大60倍,得到的值四舍五入后就可算出心率。圖表顯示模塊即繪圖模塊,是應(yīng)用中較為核心的部分。其主要功能是將接收到的數(shù)據(jù)以曲線圖的方式繪出,以達(dá)到模擬類似心電圖起搏的波形效果。Android下繪圖方法很多,Path類,SurfaceView類,Canvas類……等等都可以繪出圖形,不過(guò)由于對(duì)波形要求較高且數(shù)據(jù)量相對(duì)較大,所以采用已經(jīng)成熟的外置繪圖引擎AChartEngine來(lái)繪制圖形。和其他庫(kù)文件相似,使用AChartEngine引擎也要將相應(yīng)的jar包導(dǎo)入項(xiàng)目庫(kù)文件中,如下圖所示。 導(dǎo)入AChartEngine引擎包導(dǎo)入方法不再贅述,較為簡(jiǎn)便的方法是將包文件直接復(fù)制到項(xiàng)目libs目錄下。導(dǎo)入引擎包后就可使用其中的繪圖類,如下:// 用于存放每條折線的點(diǎn)數(shù)據(jù) private static XYSeries lineMaibo。 // 用于存放所有需要繪制的XYSeries private static XYMultipleSeriesDataset mDataset。 // 用于存放每條折線的風(fēng)格 private static XYSeriesRenderer rendererMaibo。 // 用于存放所有需要繪制的折線的風(fēng)格 private static XYMultipleSeriesRenderer mXYMultipleSeriesRenderer。 // 表格的基類private static GraphicalView chart。在接收數(shù)據(jù)的基礎(chǔ),將數(shù)據(jù)以2:1的比例用于繪圖,這是因?yàn)槔L圖時(shí)給刷新整個(gè)界面并保留原有數(shù)據(jù),線程工作量較大,如果以過(guò)高頻率刷新界面,那么很容易引起界面的崩潰乃至應(yīng)用的退出,代碼如下:// 將接收到的數(shù)據(jù)疏散五倍進(jìn)行繪圖 if (() % 2 == 0) { // 將接收到的數(shù)據(jù)疏散五倍加入繪圖數(shù)據(jù)集合 ((() 1))。 // 響應(yīng)線程 (new Runnable() { @Override public void run() { refreshChart()。 } })。 }可以看到,pluseHandler在每一次滿足條件時(shí)運(yùn)行refreshChart(),即刷新視圖:private static void refreshChart() { initLine(lineMaibo)。 ()。}在refreshChart()中調(diào)用initLine()方法,即繪圖方法體,()方法添加橫縱坐標(biāo),代碼如下:private static void initLine(XYSeries series) { // 當(dāng)集合dataList中的值超過(guò)一定額度時(shí),清空 int chartListSize = ()。 int dataListSize = ()。 xTemp = 0。 // 將縱坐標(biāo)賦值為最新接收到的數(shù)據(jù) yTemp = (dataListSize 1)。 // 如果心率曲線上揚(yáng)則調(diào)用心率判斷方法 if (chartListSize 2) if (yTemp 0 amp。amp。 (chartListSize 2) 0) { pluseSure()。 } // 以下為保留原圖曲線和新增數(shù)據(jù)點(diǎn) count = ()。 if (count 100) { count = 100。 } for (int i = 0。 i count。 i++) { x[i] = (i)。 y[i] = (i)。 } ()。 (xTemp, yTemp)。 for (int i = 0。 i count。 i++) { (x[i] + 1, y[i])。 }}其他還有initChart(),initRenderer(),setChartSettings()等方法,都是為了設(shè)置圖表的固有屬性存在的,讀者可以自行在附錄或附帶的資源中查看源碼。接收數(shù)據(jù)處理并繪圖其實(shí)在代碼中存在于一個(gè)類中(),故而可以用整體的流程圖說(shuō)明其工作流程。否是否返回連接藍(lán)牙接收到數(shù)據(jù)?存入文件轉(zhuǎn)換數(shù)據(jù)讀寫(xiě)標(biāo)志?監(jiān)測(cè)數(shù)據(jù)波形圖脈搏穩(wěn)定?計(jì)算BPM開(kāi)始是是否 接收后續(xù)流程圖界面布局主要由xml配置文件管理,一般來(lái)說(shuō),應(yīng)用中有多少個(gè)活動(dòng)界面,就需要多少布局文件,因?yàn)楸驹O(shè)計(jì)中并不要求有酷炫的界面效果,所有布局相對(duì)來(lái)說(shuō)比較簡(jiǎn)單。 Button android:id=@+id/btnExam android:layout_width=wrap_content android:layout_height=wrap_content android:layout_alignParentTop=true android:layout_centerHorizontal=true android:layout_marginTop=115dp android:text=@string/btnExam / Button android:id=@+id/btnConsult android:layout_width=wrap_content android:layout_height=wrap_content android:layout_below=@+id/btnExam android:layout_centerHorizontal=true android:text=@string/btnConsult / Button android:id=@+id/btnPreference android:layout_width=wrap_content android:layout_height=wrap_content android:layout_below=@+id/btnConsult android:layout_centerHorizontal=true android:text=@string/btnPreference android:textColor=000/以上代碼為主界面布局,力求簡(jiǎn)潔明了,設(shè)置了三個(gè)按鈕及兩個(gè)文本,都有對(duì)應(yīng)的點(diǎn)擊事件相應(yīng),具體效果可以在運(yùn)行及測(cè)試中看到。其開(kāi)發(fā)界面如下圖。 圖形開(kāi)發(fā)界面應(yīng)用用戶分為三種,未注冊(cè)用戶,注冊(cè)用戶,管理員。未注冊(cè)用戶只能使用測(cè)試功能,注冊(cè)用戶開(kāi)放咨詢與部分設(shè)置功能,管理員則擁有完整的權(quán)限。在應(yīng)用啟動(dòng)后,未注冊(cè)只會(huì)顯示一個(gè)測(cè)試按鈕可用,其他按鈕則處于“不可用”狀態(tài),通過(guò)setEnable()對(duì)其設(shè)置,代碼如下: (false)。 (false)。而注冊(cè)界面,因?yàn)闀簳r(shí)不需要輸入太多信息的緣故,采用了彈出對(duì)話框的模式,設(shè)置“用戶名”和“密碼”兩個(gè)文本編輯框,三個(gè)按鈕“取消”“注冊(cè)”“登錄”,用戶不論是注冊(cè)還是登錄都在此對(duì)話框中進(jìn)行。對(duì)話框與Sqlite輕量數(shù)據(jù)庫(kù)連接,會(huì)將注冊(cè)的用戶名和密碼封裝為一個(gè)對(duì)象”user”,凡是存取用戶皆由數(shù)據(jù)庫(kù)接管,部分代碼如下;dialog_edit_username = (EditText) view .findViewById()。 dialog_edit_password = (EditText) view .findViewById()。 (view).setPositiveButton(登錄, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { RegClickListener logListener = (RegClickListener) getActivity()。 (().toString(), ().toString())。 } }).setNeutralButton(注冊(cè), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { RegClickListener regListener = (RegClickListener) getActivity()。 (().toString(), ().toString())。 } }).setNegativeButton(取消, null)。以上代碼為設(shè)置對(duì)話三個(gè)按鈕的響應(yīng)事件,可以看到為“注冊(cè)”“登錄”兩個(gè)按鈕都設(shè)置了相應(yīng)的監(jiān)聽(tīng)器,并將文本編輯框中填寫(xiě)的文本傳入處理方法中。對(duì)填寫(xiě)文本的處理方法則放在了主界面代碼下,這是因?yàn)橐袛嘤脩羰欠褡?cè),部分代碼如下;@Override public void onReg(String username, String password) { ListUser users = ()。 boolean existFlag = false。 for (User u : users) { if (().equals(username)) { existFlag = true。 (e, (existFlag))。 } } if (existFlag) { (getApplicationContext(), 用戶名已存在, ).show()。 } else { if (() 4 || () 6) { (getApplicationContext(), 用戶名或密碼長(zhǎng)度不符合標(biāo)準(zhǔn), ).show()。 } else { User user = new User(username, password)。 (user)。 } } } @Override public void onLog(String username, String password) { ListUser users = ()。 User user = new User(username, password)。 if ((user))
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1