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

正文內(nèi)容

基于android的便攜式健康監(jiān)測(cè)系統(tǒng)——android系統(tǒng)開發(fā)畢業(yè)設(shè)計(jì)(已改無(wú)錯(cuò)字)

2022-08-23 11:28:45 本頁(yè)面
  

【正文】 mission android:name=/ usespermission android:name=/ usesfeature android:name= android:required=true/ ② 在確定開發(fā)環(huán)境是 Android 系統(tǒng)及以上的情況下,取得藍(lán)牙適配器; // Initializes Bluetooth adapter. final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService()。 否 獲取藍(lán)牙適配器 開始 開啟藍(lán)牙服務(wù) 搜索 BLE 設(shè)備 連接到 GATT 服務(wù)端 搜索到 ? 讀取 BLE 屬性 接收服務(wù)端信息 結(jié)束 設(shè)備列表 是 蘭州理工大學(xué)畢業(yè)設(shè)計(jì) 15 mBluetoothAdapter = ()。 ③ 開啟藍(lán)牙服務(wù); private BluetoothAdapter 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()。 startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)。 } ④ 搜索 BLE 設(shè)備; /** * Activity for scanning and displaying available BLE devices. */ public class DeviceScanActivity extends ListActivity { private BluetoothAdapter mBluetoothAdapter。 private boolean mScanning。 private Handler mHandler。 // Stops scanning after 10 seconds. private static final long SCAN_PERIOD = 10000。 ... private void scanLeDevice(final boolean enable) { if (enable) { // Stops scanning after a predefined scan period. (new Runnable() { @Override public void run() { mScanning = false。 (mLeScanCallback)。 } }, SCAN_PERIOD)。 mScanning = true。 (mLeScanCallback)。 } else { mScanning = false。 (mLeScanCallback)。 } ... } ... } ⑤ 搜索到藍(lán)牙設(shè)備后,可以由一個(gè)列表將之顯示出來(lái),如下用一個(gè)配置文件將之列出蘭州理工大學(xué)畢業(yè)設(shè)計(jì) 16 (具體可見 ),加載配置文件的類為 ; ?xml version= encoding=utf8? LinearLayout xmlns:android= android:orientation=vertical android:layout_width=match_parent android:layout_height=wrap_content TextView android:id=@+id/device_name android:layout_width=match_parent android:layout_height=wrap_content android:text=name android:textSize=32sp / TextView android:id=@+id/device_address android:layout_width=match_parent android:layout_height=wrap_content android:text=address android:textSize=16dp / TextView android:id=@+id/device_txPower_rssi android:layout_width=match_parent android:layout_height=wrap_content android:text=txPower_rssi android:textSize=26sp / /LinearLayout ⑥ 接下來(lái)還需連接到 GATT 服務(wù)端并讀取藍(lán)牙的一些固定屬性值,此處不再贅述,讀者可以自行至官方查詢或查看附錄 資源中的 。 數(shù)據(jù)接收模塊 此模塊承自藍(lán)牙模塊,當(dāng)藍(lán)牙服務(wù)端準(zhǔn)備就緒后,通過點(diǎn)擊設(shè)備列表進(jìn)入下一個(gè)活動(dòng)頁(yè)面,而在頁(yè)面切換間,就已經(jīng)啟動(dòng)了數(shù)據(jù)接收功能,此處會(huì)判 斷點(diǎn)擊的設(shè)備是否為開發(fā)板配套的心率傳感器,如果是則會(huì)進(jìn)入切換,否則是無(wú)法進(jìn)入下一個(gè)頁(yè)面的。 數(shù)據(jù)接收并不是可以單一存在的功能,因此代碼是嵌在類中的,由 調(diào)用 中的靜態(tài)方法來(lái)達(dá)到目的。 private mOnDataAvailable = new OnDataAvailableListener() { //BLE 終端數(shù)據(jù)被讀的事件 @Override public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { ((characteristic 蘭州理工大學(xué)畢業(yè)設(shè)計(jì) 17 .getValue()), (), characteristic .getUuid().toString())。 } //收到 BLE 終端寫入數(shù)據(jù)回調(diào) @Override public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { ((characteristic .getValue()), (), characteristic .getUuid().toString())。 } }。 接收到的數(shù)據(jù)即 (),是一個(gè)字節(jié)數(shù)組( byte[]),是因?yàn)閺乃{(lán)牙發(fā)送過來(lái)的數(shù)據(jù)是 16 位的,此處就由一個(gè)字節(jié)數(shù)組接收,接收得來(lái)的數(shù)據(jù)就為兩個(gè)字節(jié),以方便之后的處理。 UUID( Universally Unique Identifie)是指在一臺(tái)機(jī)器上生成的數(shù)字,它保證對(duì)在同一時(shí)空中的所有機(jī)器都是唯一的。這里的 ()即得到藍(lán)牙設(shè)備的 UUID 值,整個(gè)應(yīng)用中也是通過判斷 UUID 值來(lái)確定是否為配套的設(shè)備 [12]。 數(shù)據(jù)處理模塊 數(shù)據(jù)處理模塊被設(shè)計(jì)為對(duì)接收到的數(shù)據(jù)進(jìn)行一定的算法處理,并在用戶選擇下將接收到的所有數(shù)據(jù)以文件形式保存下來(lái),以便之后靜態(tài)觀察;另一方面,將接收到的數(shù)據(jù)進(jìn)行條件分析,判斷波形的周期,并以此計(jì)算 BPM( Beat Per Minutes)。 首先,藍(lán)牙傳來(lái)的值就波形來(lái)看是上下顛倒了,故而為了波形顯示將傳過來(lái)的值一律取反,并轉(zhuǎn)換為整型值。接著,將此整 型 值以追加模式寫入 SD 卡目 錄下 文件中,并在繪圖過程中調(diào)用 PluseSure()方法以計(jì)算 BPM。 部分代碼如下: // 從藍(lán)牙接收數(shù)據(jù)的方法體 public static void recData(String str, byte[] data, String uuid) { if (()) { int pluse = ~data[1]。 // pluse = 0 pluse。 // pluse = pluse 1。 // pluse = pluse + 700。 // 接收的數(shù)據(jù)超過 200,則將集合清 0 if (() = 200) { ()。 } // 將接收到的數(shù)據(jù)加入集合 蘭州理工大學(xué)畢業(yè)設(shè)計(jì) 18 (pluse)。 // 如果讀寫標(biāo)志為真,則將接收到的數(shù)據(jù)寫入文件 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ǔ)空間,可以從代碼中看蘭州理工大學(xué)畢業(yè)設(shè)計(jì) 19 出,接收到的數(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)才開始真正計(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 類??等等都可以繪出圖形,不過由于對(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)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1