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

正文內(nèi)容

基于android的便攜式健康監(jiān)測系統(tǒng)——android系統(tǒng)開發(fā)畢業(yè)設(shè)計-閱讀頁

2025-07-27 11:28本頁面
  

【正文】 不盡相同。 否 獲取藍牙適配器 開始 開啟藍牙服務(wù) 搜索 BLE 設(shè)備 連接到 GATT 服務(wù)端 搜索到 ? 讀取 BLE 屬性 接收服務(wù)端信息 結(jié)束 設(shè)備列表 是 蘭州理工大學(xué)畢業(yè)設(shè)計 15 mBluetoothAdapter = ()。 ... // Ensures Bluetooth is available on the device and it is enabled. If not, // displays a dialog requesting user permission to enable Bluetooth. if (mBluetoothAdapter == null || !()) { Intent enableBtIntent = new Intent()。 } ④ 搜索 BLE 設(shè)備; /** * Activity for scanning and displaying available BLE devices. */ public class DeviceScanActivity extends ListActivity { private BluetoothAdapter mBluetoothAdapter。 private Handler mHandler。 ... private void scanLeDevice(final boolean enable) { if (enable) { // Stops scanning after a predefined scan period. (new Runnable() { Override public void run() { mScanning = false。 } }, SCAN_PERIOD)。 (mLeScanCallback)。 (mLeScanCallback)。 數(shù)據(jù)接收模塊 此模塊承自藍牙模塊,當(dāng)藍牙服務(wù)端準(zhǔn)備就緒后,通過點擊設(shè)備列表進入下一個活動頁面,而在頁面切換間,就已經(jīng)啟動了數(shù)據(jù)接收功能,此處會判 斷點擊的設(shè)備是否為開發(fā)板配套的心率傳感器,如果是則會進入切換,否則是無法進入下一個頁面的。 private mOnDataAvailable = new OnDataAvailableListener() { //BLE 終端數(shù)據(jù)被讀的事件 Override public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { ((characteristic 蘭州理工大學(xué)畢業(yè)設(shè)計 17 .getValue()), (), characteristic .getUuid().toString())。 } }。 UUID( Universally Unique Identifie)是指在一臺機器上生成的數(shù)字,它保證對在同一時空中的所有機器都是唯一的。 數(shù)據(jù)處理模塊 數(shù)據(jù)處理模塊被設(shè)計為對接收到的數(shù)據(jù)進行一定的算法處理,并在用戶選擇下將接收到的所有數(shù)據(jù)以文件形式保存下來,以便之后靜態(tài)觀察;另一方面,將接收到的數(shù)據(jù)進行條件分析,判斷波形的周期,并以此計算 BPM( Beat Per Minutes)。接著,將此整 型 值以追加模式寫入 SD 卡目 錄下 文件中,并在繪圖過程中調(diào)用 PluseSure()方法以計算 BPM。 // pluse = 0 pluse。 // pluse = pluse + 700。 } // 將接收到的數(shù)據(jù)加入集合 蘭州理工大學(xué)畢業(yè)設(shè)計 18 (pluse)。 FileWriter fw = new FileWriter(dataFile, true)。 ()。 } } } } // 判斷 BPM 的方法體 protected static void pluseSure() { // 調(diào)用此方法時的時間 long curTime = ()。 int timeListSize = ()。 // 求得 BPM Bpp = (float) (timeListSize 1) * 1000 / durTime。 String bpmStr = (Bpm)。 // 如果連續(xù) 4 個心率曲線上揚的時間不在正常范圍內(nèi),則將時間集合清 0,否則顯示 if (tmpTime 3000 || tmpTime 1000) { ()。 } else { (bpmStr)。在下面的繪圖模塊中可以看到一個判斷條件:當(dāng)波形數(shù)據(jù)上揚(即前一個數(shù)據(jù)小于 0,后一個大于 0, 0 是判定界限 )時,就調(diào)用判斷 BPM 的方法體。 判斷 BPM 的前提是在脈搏較為穩(wěn)定的情況下,所以在計算之前加了一個判定脈搏是否穩(wěn)定的算法,即心率上揚之間的間隔穩(wěn)定在一定范圍之內(nèi)才開始真正計算 BPM 并顯示,此處是檢測到 4 個上揚波形在合理范圍之內(nèi)后就由相互之間的時間間隔除上揚波形的個數(shù)(即跳動次數(shù))再擴大 60 倍,得到的值四舍五入后就可算出心率。其主要 功能是將接收到的數(shù)據(jù)以曲線圖的方式繪出,以達到模擬類似心電圖起搏的波形效果。 和其他庫文件相似,使用 AChartEngine 引擎也要將相應(yīng)的 jar 包導(dǎo)入項目庫文件中,如下圖所示。 導(dǎo)入引擎包后就可使用其中的繪圖類,如下: // 用于存放每條折線的點數(shù)據(jù) private static XYSeries lineMaibo。 // 用于存放每條折線的風(fēng)格 private static XYSeriesRenderer rendererMaibo。 // 表格的基類 private static GraphicalView chart。 // 響應(yīng)線程 (new Runnable() { Override public void run() { refreshChart()。 } 可以看到, pluseHandler 在每一次滿足條件時運行 refreshChart(),即刷新視圖: private static void refreshChart() { initLine(lineMaibo)。 } 在 refreshChart()中調(diào)用 initLine()方法,即繪圖方法體,在此方法體中利用 ()方法添加橫縱坐標(biāo),代碼如下: private static void initLine(XYSeries series) { // 當(dāng)集合 dataList 中的值超過一定額度時,清空 int chartListSize = ()。 xTemp = 0。 // 如果心率曲線上揚則調(diào)用心率判斷方法 if (chartListSize 2) if (yTemp 0 amp。 (chartListSize 2) 0) { pluseSure()。 if (count 100) { count = 100。 i count。 蘭州理工大學(xué)畢業(yè)設(shè)計 21 y[i] = (i)。 (xTemp, yTemp)。 i count。 } } 其他還有 initChart(), initRenderer(), setChartSettings()等方法,都是為了設(shè)置圖表的固有屬性存在的,讀者可以自行在附錄或附帶的資源中查看源碼。 圖 接收后續(xù)流程圖 界面布局 界面布局主 要由 xml配置文件管理,一般來說,應(yīng)用中有多少個活動界面,就需要多少否 是 否 返回 連接藍牙 接收到數(shù)據(jù) ? 存入文件 轉(zhuǎn)換數(shù)據(jù) 讀寫標(biāo)志 ? 監(jiān)測數(shù)據(jù) 波形圖 脈搏穩(wěn)定 ? 計算 BPM 開始 是 是 否 蘭州理工大學(xué)畢業(yè)設(shè)計 22 布局文件,因為本設(shè)計中并不要求有酷炫的界面效果,所有布局相對來說比較簡單。其開發(fā)界面如下圖。未注冊用戶只能使用測試功能,蘭州理工大學(xué)畢業(yè)設(shè)計 23 注冊用戶開放咨詢與部分設(shè)置功能,管理員則擁有完整的權(quán)限。 (false)。 對話框與 Sqlite 輕量數(shù)據(jù)庫連接,會將注冊的用戶名和密碼封裝為一個對象 ”user”存入數(shù)據(jù)庫 中,凡是存取用戶皆由數(shù)據(jù)庫接管,部分代碼如下; dialog_edit_username = (EditText) view .findViewById()。 (view).setPositiveButton(登錄 , new OnClickListener() { Override public void onClick(DialogInterface dialog, int which) { RegClickListener logListener = (RegClickListener) getActivity()。 } }).setNeutralButton(注冊 , new OnClickListener() { Override public void onClick(DialogInterface dialog, int which) { RegClickListener regListener = (RegClickListener) getActivity()。 } }).setNegativeButton(取消 , null)。對填寫文本的處理方法則放在了主界面代碼下,這是因為要判斷用戶是否注冊, 功能相當(dāng)于判斷 是否能在數(shù)據(jù)庫 中找到相應(yīng)對象,部分代碼如下; Override public void onReg(String username, String password) { ListUser users = ()。 for (User u : users) { if (().equals(username)) { 蘭州理工大學(xué)畢業(yè)設(shè)計 24 existFlag = true。 } } if (existFlag) { (getApplicationContext(), 用戶名已存在 , ).show()。 } else { User user = new User(username, password)。 } } } Override public void onLog(String username, String password) { ListUser users = ()。 if ((user)) { (true)。 (username)。 ()。 (false)。此模塊已有功能,可由下列流程圖進行說明 ,如圖 所示 ; 蘭州理工大學(xué)畢業(yè)設(shè)計 25 圖 注冊模塊流程示意圖 設(shè)置模塊 設(shè)置模塊主要用于設(shè)置一些常規(guī)的配置,分為普通用戶和管理員進行設(shè)置權(quán)限分配,管理員可以使用“用戶管理”中的全部功能,即“增加用戶”“刪除用戶”以及“查詢用戶”,普通用戶則只能 使用“查詢用戶”功能,這是為了防止普通用戶無意將修改其他用戶資料而造成的數(shù)據(jù)泄漏。 設(shè)置模塊主要是布局文件的編寫,將視圖層層嵌套,以達到界面美觀舒適的效果,如下為查詢用戶的布局代碼 [14]; RelativeLayout android:id=+id/queryUser android:layout_width=match_parent android:layout_height=wrap_content TextView android:layout_width=wrap_content android:layout_height=wrap_content android:text=查詢用戶 android:layout_marginLeft=10dp 否 是 開始 注冊 符合要求 ? 存入數(shù)據(jù)庫 登錄 功能開放 部分功能未開放 結(jié)束 已注冊 ? 是 否 蘭州理工大學(xué)畢業(yè)設(shè)計 26 android:padding=4sp android:textSize=20sp / /RelativeLayout 在相應(yīng)的設(shè)置界面下,有此文本的監(jiān)聽器,以響應(yīng)點擊事件
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1