Android 低功率藍牙之BluetoothGattCallback回調方法詳解

BluetoothGattCallback?是 Android 中用于處理藍牙低功耗(BLE)設備通信的核心回調類。它負責處理與 BLE 設備的連接、服務發現、數據讀寫等操作的結果。以下是對?BluetoothGattCallback?的詳細解析:

1.?onConnectionStateChange

  • 觸發時機:當與 BLE 設備的連接狀態發生變化時觸發。

  • 參數

    • gattBluetoothGatt?對象,表示當前連接的 GATT 客戶端。

    • status:連接狀態的變化結果,BluetoothGatt.GATT_SUCCESS?表示成功。

    • newState:新的連接狀態,可能的值有?BluetoothProfile.STATE_CONNECTED?或?BluetoothProfile.STATE_DISCONNECTED

  • 常見操作

    • 連接成功后,調用?gatt.discoverServices()?開始發現服務。

    • 斷開連接后,釋放資源或嘗試重新連接。

java

復制

@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {if (newState == BluetoothProfile.STATE_CONNECTED) {// 連接成功,開始發現服務gatt.discoverServices();} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {// 斷開連接,釋放資源gatt.close();}
}

2.?onServicesDiscovered

  • 觸發時機:當發現 BLE 設備的服務完成時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • status:服務發現的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 獲取服務列表并查找特定的特征(Characteristic)或描述符(Descriptor)。

java

復制

@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {List<BluetoothGattService> services = gatt.getServices();for (BluetoothGattService service : services) {// 處理每個服務}}
}

3.?onCharacteristicRead

  • 觸發時機:當讀取特征值完成時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • characteristic:被讀取的特征對象。

    • status:讀取操作的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 處理讀取到的特征值。

java

復制

@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {byte[] data = characteristic.getValue();// 處理讀取到的數據}
}

4.?onCharacteristicWrite

  • 觸發時機:當寫入特征值完成時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • characteristic:被寫入的特征對象。

    • status:寫入操作的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 確認寫入操作是否成功。

java

復制

@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {// 寫入成功}
}

5.?onCharacteristicChanged

  • 觸發時機:當特征值發生變化時觸發(通常是由于通知或指示)。

  • 參數

    • gattBluetoothGatt?對象。

    • characteristic:發生變化的特征對象。

  • 常見操作

    • 處理特征值的變化。

java

復制

@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {byte[] data = characteristic.getValue();// 處理變化的數據
}

6.?onDescriptorRead

  • 觸發時機:當讀取描述符完成時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • descriptor:被讀取的描述符對象。

    • status:讀取操作的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 處理讀取到的描述符值。

java

復制

@Override
public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {byte[] data = descriptor.getValue();// 處理讀取到的描述符數據}
}

7.?onDescriptorWrite

  • 觸發時機:當寫入描述符完成時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • descriptor:被寫入的描述符對象。

    • status:寫入操作的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 確認寫入操作是否成功。

java

復制

@Override
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {// 寫入成功}
}

8.?onReadRemoteRssi

  • 觸發時機:當讀取遠程設備的 RSSI(信號強度)完成時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • rssi:讀取到的 RSSI 值。

    • status:讀取操作的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 處理讀取到的 RSSI 值。

java

復制

@Override
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {// 處理 RSSI 值}
}

9.?onMtuChanged

  • 觸發時機:當 MTU(最大傳輸單元)大小發生變化時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • mtu:新的 MTU 大小。

    • status:MTU 變化的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 處理 MTU 變化后的數據傳輸。

java

復制

@Override
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {// 處理 MTU 變化}
}

10.?onPhyUpdate

  • 觸發時機:當物理層(PHY)更新完成時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • txPhy:發送端的 PHY。

    • rxPhy:接收端的 PHY。

    • status:PHY 更新的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 處理 PHY 更新后的通信。

java

復制

@Override
public void onPhyUpdate(BluetoothGatt gatt, int txPhy, int rxPhy, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {// 處理 PHY 更新}
}

11.?onPhyRead

  • 觸發時機:當讀取物理層(PHY)信息完成時觸發。

  • 參數

    • gattBluetoothGatt?對象。

    • txPhy:發送端的 PHY。

    • rxPhy:接收端的 PHY。

    • status:讀取操作的結果,BluetoothGatt.GATT_SUCCESS?表示成功。

  • 常見操作

    • 處理讀取到的 PHY 信息。

java

復制

@Override
public void onPhyRead(BluetoothGatt gatt, int txPhy, int rxPhy, int status) {if (status == BluetoothGatt.GATT_SUCCESS) {// 處理讀取到的 PHY 信息}
}

總結

BluetoothGattCallback?是 Android BLE 開發中非常重要的類,它提供了與 BLE 設備交互的各種回調方法。開發者需要根據具體的業務需求,實現這些回調方法來處理連接、服務發現、數據讀寫等操作的結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71619.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71619.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71619.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek group-limited expert routing和負載均衡

Ref https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/model.py GitHub - deepseek-ai/EPLB: Expert Parallelism Load Balancer DeepSeek-V3 Technical Report DeepSeek的路由方法 class Gate(nn.Module):def __init__(self, args: ModelArgs):super().__…

Python的Pandas和matplotlib庫:讓數據可視化賊簡單

在數據爆炸的時代&#xff0c;數據可視化已成為數據分析的關鍵環節。Python 作為強大的編程語言&#xff0c;擁有眾多用于數據可視化的庫&#xff0c;而 pandas 庫在其中扮演著重要角色。它不僅能高效處理和分析數據&#xff0c;還具備強大的數據可視化功能&#xff0c;讓我們輕…

【代碼分享】基于IRM和RRT*的無人機路徑規劃方法詳解與Matlab實現

基于IRM和RRT*的無人機路徑規劃方法詳解與Matlab實現 1. IRM與RRT*的概述及優勢 IRM&#xff08;Influence Region Map&#xff09;通過建模障礙物的影響區域&#xff0c;量化環境中的安全風險&#xff0c;為RRT算法提供啟發式引導。RRT&#xff08;Rapidly-exploring Random…

ubuntu打包 qt 程序,不用每次都用linuxdeployqt打包

用linuxdeployqt打包太麻煩&#xff0c;每次程序編譯都要用linuxdeployqt打包一次&#xff0c;而且每次都要很長時間&#xff0c;通過研究得出一個新的打包方法 1.用用linuxdeployqt得出依賴的庫文件&#xff08;只要沒有增加新模塊&#xff0c;只要用一次就可以&#xff09; …

Github 2025-03-06 Go開源項目日報 Top10

根據Github Trendings的統計,今日(2025-03-06統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Go項目10Terraform:基礎設施即代碼的開源工具 創建周期:3626 天開發語言:Go協議類型:OtherStar數量:40393 個Fork數量:9397 次關注人數:…

redis 與 DB 的一致性 7 種策略

為什么要使用 redis 做緩存?封底估算為什么是單行數據的QPS,而不是總的? 什么時候使用DB,Redis,本地緩存 數據的分類一致性的方案1. 先清除Redis,再更新 DB2. 先更新DB,再清除 Redis使用場景: 3. 延遲刪除與延遲雙刪使用場景 4. 監聽 binlog 清除5. 雙寫使用場景: 6. 監聽bin…

使用 Elasticsearch 進行集成測試初始化??數據時的注意事項

作者&#xff1a;來自 Elastic piotrprz 在創建應該使用 Elasticsearch 進行搜索、數據聚合或 BM25/vector/search 的軟件時&#xff0c;創建至少少量的集成測試至關重要。雖然 “模擬索引” 看起來很誘人&#xff0c;因為測試甚至可以在幾分之一秒內運行&#xff0c;但它們實際…

【selenium工具操作web頁面中的下拉框元素 】

使用F12定位下拉框中的元素 使用F12定位下拉框中的元素 1、有一類元素不是直接顯示的頁面上的&#xff0c;而是需要點擊某些其他元素后才會顯示在頁面上&#xff0c;比如這里的下拉框。 2、這類元素會有一個特點&#xff1a;鼠標如果移開(沒在元素上)&#xff0c;這些元素就會…

C++ set map 詳解

文章目錄 1. 容器2. set和multiset2.1 set2.1.1 構造函數2.1.2 insert和erase2.1.2.1 insert2.1.2.2 erase 2.1.3 查找和訪問2.1.3.1 set迭代器相關2.1.3.2 find && count2.1.3.3 范圍查找 2.2 multiset2.2.1 insert和erase2.2.2 find和count 2.3 set和multiset的在算法…

Unity網絡開發基礎 (2) 網絡協議基礎

本文章不作任何商業用途 僅作學習與交流 部分圖片來自Unity唐老師 目錄 1.虛擬模型 2.實際模型 TCP/IP 3.傳輸層協議 TCP/UDP TCP 協議詳解 1. 核心機制 2. 頭部格式&#xff08;20 字節最小&#xff09; UDP 協議詳解 1. 核心特點 2. 頭部格式&#xff08;固定 8 字節…

HTML label 標簽使用

點擊 <label> 標簽通常會使與之關聯的表單控件獲得焦點或被激活。 通過正確使用 <label> 標簽&#xff0c;可以使表單更加友好和易于使用&#xff0c;同時提高整體的可訪問性。 基本用法 <label> 標簽通過 for 屬性與 id 為 username 的 <input> 元素…

JDBC、MyBatis 、MyBatis-Plus面試總結(一)

以下為你整理了一些 MyBatis 和 MyBatis-Plus 中 mapper.xml 相關的常見面試問題及答案&#xff1a; 基礎概念類 問題 1&#xff1a;什么是 mapper.xml 文件&#xff0c;它在 MyBatis 中有什么作用&#xff1f; 答案&#xff1a;mapper.xml 文件是 MyBatis 中用于定義 SQL 語…

GCC RISCV 后端 -- GCC Passes 注釋

在前面文章提到&#xff0c;當GCC 前端完成對C源代碼解析完成后&#xff0c;就會使用 處理過程&#xff08;Passes&#xff09;機制&#xff0c;通過一系列的處理過程&#xff0c;將 GENERIC IR 表示的C程序 轉步轉換成 目標機器的匯編語言。過程描述如下圖所示&#xff1a; 此…

基于Python實現的智能旅游推薦系統(Django)

基于Python實現的智能旅游推薦系統(Django) 開發語言:Python 數據庫&#xff1a;MySQL所用到的知識&#xff1a;Django框架工具&#xff1a;pycharm、Navicat 系統功能實現 總體設計 系統實現 系統首頁模塊 統首頁頁面主要包括首頁&#xff0c;旅游資訊&#xff0c;景點信息…

鴻蒙全棧開發 D2

課程目標 掌握ArkTS基礎語法與核心概念理解聲明式UI開發范式能獨立開發簡單鴻蒙應用組件建立規范的代碼編寫習慣 第一部分&#xff1a;初識ArkTS 1.1 語言全景認知 #mermaid-svg-V5mnjQN3DAHkfoBo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size…

【YashanDB認證】yashandb23.3.1 個人版單機部署安裝實踐

YCA報名鏈接如下: YashanDB|崖山數據庫系統YashanDB學習中心-YCA認證詳情 目前免費 主要參考文檔&#xff1a; 單機&#xff08;主備&#xff09;部署 | YashanDB Doc 另外還參考摩天輪文章&#xff1a; YashanDB 23.2.9.101 企業版安裝步驟搶先看&#xff01; - 墨天輪 …

【藍橋杯】每天一題,理解邏輯(3/90)【Leetcode 快樂數】

閑話系列&#xff1a;每日一題&#xff0c;禿頭有我&#xff0c;Hello&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;,我是IF‘Maxue&#xff0c;歡迎大佬們來參觀我寫的藍橋杯系列&#xff0c;我好久沒有更新博客了&#xff0c;因為up豬我寒假用自己的勞動換了…

爬蟲Incapsula reese84加密案例:Etihad航空

聲明: 該文章為學習使用,嚴禁用于商業用途和非法用途,違者后果自負,由此產生的一切后果均與作者無關 一、找出需要加密的參數 1.js運行 atob(‘aHR0cHM6Ly93d3cuZXRpaGFkLmNvbS96aC1jbi8=’) 拿到網址,F12打開調試工具,隨便搜索航班,切換到network搜索一個時間點可以找…

緩存雪崩 緩存擊穿 緩存穿透

1. redis使用場景-緩存-緩存穿透 在實際開發中&#xff0c;Redis 被廣泛應用于緩存&#xff0c;以提高系統性能和響應速度。然而&#xff0c;在使用緩存時&#xff0c;需要注意一些問題&#xff0c;其中 緩存穿透 是一個常見且需要重點關注的場景。 什么是緩存穿透 ● 緩存穿…

【YOLOv12改進trick】多尺度大核注意力機制MLKA模塊引入YOLOv12,實現多尺度目標檢測漲點,含創新點Python代碼,方便發論文

??改進模塊??:多尺度大核注意力機制(MLKA) ??解決問題??:MLKA模塊結合多尺度、門控機制和空間注意力,顯著增強卷積網絡的模型表示能力。 ??改進優勢??:超分辨的MLKA模塊對小目標和模糊目標漲點很明顯 ??適用場景??:小目標檢測、模糊目標檢測等 ??思路…