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.rhkb.cn/news/31529.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“量子心灵AI“的监控仪表盘 - javascript网页设计案例

【前端实战】基于Three.js和Chart.js打造未来科技风AI监控仪表盘 本文通过AI辅助开发&#xff0c;详细记录了一个高级前端项目的完整实现过程。文章包含核心代码片段、技术要点及遇到的问题与解决方案。适合有一定前端基础的开发者学习参考。 1. 项目概述 本文详细介绍了一个名…

vtkDepthSortPolyData 根据相机视图方向对多边形数据进行排序

1. 作用 在 3D 渲染中&#xff0c;透明对象的渲染顺序非常重要。如果透明对象的渲染顺序不正确&#xff0c;可能会导致错误的视觉效果&#xff08;例如&#xff0c;远处的透明对象遮挡了近处的透明对象&#xff09;。vtkDepthSortPolyData 通过对多边形数据进行深度排序&#…

第十五章:go package 包的管理

import f "fmt"   // 注意 这里 f 是包的别名 init初始化函数 在每一个Go源文件中&#xff0c;都可以定义任意个如下格式的特殊函数&#xff1a; func init(){// ... } package&#xff1a;声明包的关键字 packagename&#xff1a;包名&#xff0c;可以不与文…

【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统

【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统 存储器存储器相关概念存储器分类存储器系统存储器性能指标存储器层次概述程序访问的局部性原理SRAM存储器存储器的读写周期DRAM存储器DRAM控制器高性能的主存储器存储器扩展只读存储器ROM光擦可编程只读存储…

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器

开源&#xff01;速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器 目录 开源&#xff01;速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器本项目未经授权&#xff0c;禁止商用&#xff01;本项目未经授权&#xff0c;禁止商用&#xff01;本项目未经授权&…

20250212:linux系统DNS解析卡顿5秒的bug

问题: 1:人脸离线识别记录可以正常上传云端 2:人脸在线识别请求却一直超时 3:客户使用在线网络 思路:

爱普生温补晶振 TG5032CFN高精度稳定时钟的典范

在科技日新月异的当下&#xff0c;众多领域对时钟信号的稳定性与精准度提出了极为严苛的要求。爱普生温补晶振TG5032CFN是一款高稳定性温度补偿晶体振荡器&#xff08;TCXO&#xff09;。该器件通过内置温度补偿电路&#xff0c;有效抑制环境温度变化对频率稳定性的影响&#x…

【病毒分析】熊猫烧香病毒分析及其查杀修复

目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …

JavaWeb后端基础(7)AOP

AOP是Spring框架的核心之一&#xff0c;那什么是AOP&#xff1f;AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实说白了&#xff0c;面向切面编程就是面向特定方法编程。AOP是一种思想&#xff0c;而在Spring框…

AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录

AutoDL平台租借GPU&#xff0c;创建transformers环境&#xff0c;使用VSCode SSH登录 一、AutoDl平台租用GPU 1.注册并登录AutoDl官网&#xff1a;https://www.autodl.com/home 2.选择算力市场&#xff0c;找到需要的GPU&#xff1a; 我这里选择3090显卡 3.这里我们就选择P…

三维建模与视频融合(3D-Video Integration)技术初探。

三维建模与视频融合&#xff08;3D-Video Integration&#xff09;是一种将虚拟三维模型无缝嵌入实拍视频场景的技术&#xff0c;广泛应用于影视特效、增强现实&#xff08;AR&#xff09;、游戏开发、广告制作 、视频监控 等领域。 一、技术核心流程 三维建模与动画 使用工具…

天津大学:《深度解读DeepSeek:部署、使用、安全》

大家好&#xff0c;我是吾鳴。 吾鳴之前给大家分享过由天津大学出品的报告《DeepSeek原理与效应》&#xff0c;今天吾鳴再给大家分享一份由天津大学出品的报告——《深度解读DeepSeek&#xff1a;部署、使用、安全》。 报告主要从DeepSeek本地化部署、DeepSeek使用方法与技巧、…

用android studio模拟器,模拟安卓手机访问网页,使用Chrome 开发者工具查看控制台信息

web 网页项目在安卓手机打开时出现问题&#xff0c;想要查看控制台调试信息。记录一下使用android studio 模拟器访问的方式。 步骤如下&#xff1a; 1.安装android studio&#xff0c;新增虚拟设备&#xff08;VDM- virtual device manager) 点击Virtual Device Manager后会…

【音视频】ffmpeg命令提取像素格式

1、提取YUV数据 提取yuv数据&#xff0c;并保持分辨率与原视频一致 使用-pix_fmt或-pixel_format指定yuv格式提取数据&#xff0c;并保持原来的分辨率 ffmpeg -i music.mp4 -t "01:00" -pixel_format yuv420p music.yuv提取成功后&#xff0c;可以使用ffplay指定y…

同为科技智能PDU在数据中心场景的应用与解决方案

数据中心当前处于一个快速发展和技术变革的特殊时期&#xff0c;全新的人工智能应用正在重塑整个世界&#xff0c;为社会带来便捷的同时&#xff0c;也为数据中心的发展带来了新的机遇和挑战。智能算例的爆发式增长&#xff0c;对数据中心提出了大算力、高性能的新需求&#xf…

deepseek在pycharm中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm&#xff0c;如何接入deepseek是我们窥探ai代码编写的第一步&#xff0c;熟悉起来总没坏处。 1、官网安装pycharm社区版&#xff08;免费&#xff09;&#xff0c;如果需要安装专业版&#xff0c;需要另外找破解码。 2、安装Ollama…

汽车一键启动按钮更换注意事项

汽车一键启动开关更换教程 一键启动开关是现代汽车中常见的便捷配置&#xff0c;但随着时间的推移&#xff0c;这个部件可能会出现失灵的情况。当一键启动开关发生故障时&#xff0c;许多车主选择自行更换。以下是整理的一键启动开关更换教程&#xff1a; 更换前的准备 选择匹…

群晖DS223 Docker搭建为知笔记

群晖DS223 Docker搭建为知笔记&#xff0c;打造你的专属知识宝库 一、引言 在数字化信息爆炸的时代&#xff0c;笔记软件成为了我们管理知识、记录灵感的得力助手。为知笔记&#xff0c;作为一款专注于工作笔记和团队协作的云笔记产品&#xff0c;以其丰富的功能和便捷的使用体…

①Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网

Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网https://item.taobao.com/item.htm?ftt&id784749793551 MODBUS TCP 通信单元 MODBUS TCP 转 RS485 MS-A1-50X1 系列概述 MS-A1-50X1 系列概述 MS-A1-50X1系列作为MODBUS TCP通信的服务器进行动作。可通…

BI 工具响应慢?可能是 OLAP 层拖了后腿

在数据驱动决策的时代&#xff0c;BI 已成为企业洞察业务、辅助决策的必备工具。然而&#xff0c;随着数据量激增和分析需求复杂化&#xff0c;BI 系统“卡”、“响应慢”的问题日益突出&#xff0c;严重影响分析效率和用户体验。 本文将深入 BI 性能问题的根源&#xff0c;并…