当前位置: 首页 > article >正文

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 设备交互的各种回调方法。开发者需要根据具体的业务需求,实现这些回调方法来处理连接、服务发现、数据读写等操作的结果。

相关文章:

Android 低功率蓝牙之BluetoothGattCallback回调方法详解

BluetoothGattCallback 是 Android 中用于处理蓝牙低功耗&#xff08;BLE&#xff09;设备通信的核心回调类。它负责处理与 BLE 设备的连接、服务发现、数据读写等操作的结果。以下是对 BluetoothGattCallback 的详细解析&#xff1a; 1. onConnectionStateChange 触发时机&am…...

PHP之字符串拼接

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的一些关于字符串拼接的信息。 特别注意方法一&#xff0c;在别的语言中基本都是用拼接的。 方法一&#xff1a;(直接拼接) $x 123; echo "hello" . $x;方法二&#xff1a;(多输出拼接) …...

Python的那些事第四十一篇:简化数据库交互的利器Django ORM

Django ORM:简化数据库交互的利器 摘要 随着互联网技术的飞速发展,Web开发越来越受到重视。Django作为一款流行的Python Web框架,以其高效、安全、可扩展等特点受到了广大开发者的喜爱。其中,Django ORM(对象关系映射)是Django框架的核心组件之一,它为开发者提供了一种…...

通过多线程同时获取H264和H265码流

目录 一.RV1126 VI采集摄像头数据并同时编码H264、H265的大概流程​编辑​编辑 1.1初始化VI模块&#xff1a; 1.2H264、H265的VENC模块初始化&#xff1a; 1.3VI分别绑定H264的VENC层和H265的VENC层&#xff1a; ​​​​​​​1.4开启H264线程采集H264的VENC数据&#xff…...

DeepSeek V3 源码:从入门到放弃!

从入门到放弃 花了几天时间&#xff0c;看懂了DeepSeek V3 源码的逻辑。源码的逻辑是不难的&#xff0c;但为什么模型结构需要这样设计&#xff0c;为什么参数需要这样设置呢&#xff1f;知其然&#xff0c;但不知其所以然。除了模型结构以外&#xff0c;模型的训练数据、训练…...

海量数据融合互通丨TiDB 在安徽省住房公积金监管服务平台的应用实践

导读 安徽省住房公积金监管服务平台通过整合全省 17 家公积金中心的数据&#xff0c;致力于实现数据共享、规范化管理与高效数据分析。为了应对海量数据处理需求&#xff0c;安徽省选择 TiDB 作为底层数据库&#xff0c;利用其分布式架构和 HTAP 能力&#xff0c;实现了快速的…...

Sqlserver安全篇之_手工创建TLS用到的pfx证书文件

Sqlserver官方提供的Windows Powershell脚本 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-sql-server-encryption?viewsql-server-ver16 # Define parameters $certificateParams {Type "SSLServerAuthentication"Subje…...

Linux12-UDP\TCP

一、UDP 1.特点: 尽最大努力交付,存在丢包的可能 无连接 面向数据报 机制简单,传输效率高 2.应用场景: 1.画面传输 VNC 直播:要求实时性高、允许数据丢失、 二、TCP 1.特点: 面向数据流(流式套接字) 建立连接 安全可靠的传输协议 三次握手:TCP建立连接时,…...

Tailwind CSS 问题:npm error could not determine executable to run

问题与处理策略 问题描述 npx tailwindcss init -p在使用 Tailwind CSS 的前端项目中&#xff0c;执行上述指令&#xff0c;即初始化 Tailwind CSS 时&#xff0c;报如下错误 npm error could not determine executable to run# 报错npm 错误无法确定要运行的可执行文件问题…...

C# 实现鼠标轨迹录制与回放自动化功能(附源码)

在软件自动化测试或者重复性办公任务中&#xff0c;鼠标操作的自动化可以大大减少人工干预&#xff0c;提高工作效率。这里将详细介绍如何使用 C# 实现鼠标轨迹的录制与回放功能&#xff0c;代码结构清晰&#xff0c;具有较强的扩展性。 引用 NuGet 包 在开发这个功能时&…...

【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式

与设计模式相处&#xff1a;真实世界中的设计模式 设计模式是软件开发中的经典解决方案&#xff0c;它们帮助我们解决常见的设计问题&#xff0c;并提高代码的可维护性和可扩展性。在《Head First设计模式》一书中&#xff0c;作者通过生动的案例和通俗的语言&#xff0c;深入…...

自由学习记录(42)

可能会出现到后面没有教程可以看&#xff0c;走不动&#xff0c;&#xff0c;但还是尝试吧 过程远比想象的要多 那连Live2d的这些脚本怎么控制的都要了解一下 ------------ 文件类型和扩展名 | 编辑手册 | Live2D Manuals & Tutorials 全部导入之后 在这下载SDK Live2D…...

mac安装nvm=>node=>nrm

下载并安装 NVM 运行以下命令下载并安装 NVM&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash 配置环境变量 vim ~/.zshrc 按 i 将如下代码复制进去&#xff0c;controlc &#xff0c;再按 :wq完成编辑 export NVM_DIR…...

excel vlookup的精确查询、模糊查询、反向查询、多列查询

目录 入门 精确查询 模糊查询 反向查询 (搭配 if 函数) 多列查询 (搭配 match 函数) 入门 精确查询 需求: 查找 学生编号是008 所在的班级 操作: 在I2单元格输入公式如下,VLOOKUP(H2,B1:E12,4,FALSE), 得出结果 看一下vlookup 公式每一个参数应该怎么写? 语法: vlookup…...

安装remixd,在VScode创建hardhat

在终端&#xff0c;以管理员身份&#xff0c;cmd 需要科学上网 npm install -g remix-project/remixd 在vscode插件中&#xff0c;安装solidity插件&#xff0c;是暗灰色那款 1.将nodeJs的版本升级至18以上 2.在vscode打开一个新的文件&#xff0c;在终端输入 npx hardhat 3.…...

【Python爬虫】利用代理IP爬取跨境电商AI选品分析

引言 随着DeepSeek的流行&#xff0c;越来越多的用户开始尝试将AI工具融入到日常工作当中&#xff0c;借助AI的强大功能提高工作效率。最近又掀起了一波企业出海的小高潮&#xff0c;那么如果是做跨境电商业务&#xff0c;怎么将AI融入工作流中呢&#xff1f;在做跨境电商的时候…...

捣鼓180天,我写了一个相册小程序

&#x1f64b;为什么要做土著相册这样一个产品&#xff1f; ➡️在高压工作之余&#xff0c;我喜欢浏览B站上的熊猫幼崽视频来放松心情。有天在家族群里看到了大嫂分享的侄女卖萌照片&#xff0c;同样感到非常解压。于是开始翻阅过去的聊天记录&#xff0c;却发现部分图片和视…...

Linux 上离线安装 python3

在Linux系统上进行离线安装 Python3&#xff0c;通常是因为目标机器没有网络连接。以下是一个通用的步骤指南&#xff0c;帮助你在这种情况下成功安装Python 3&#xff1a; 下载安装包 选择一台有网络连接的机器&#xff1a;这台机器的操作系统应该尽可能与目标机器相同或相似…...

洛谷 P1480 A/B Problem(高精度详解)c++

题目链接&#xff1a;P1480 A/B Problem - 洛谷 1.题目分析 1&#xff1a;说明这里是高精度除以低精度的形式&#xff0c;为什么不是高精度除以高精度的形式&#xff0c;是因为它很少见&#xff0c;它的模拟方式是用高精度减法来做的&#xff0c;并不能用小学列竖式的方法模拟…...

图像滑块对比功能的开发记录

背景介绍 最近&#xff0c;公司需要开发一款在线图像压缩工具&#xff0c;其中的一个关键功能是让用户直观地比较压缩前后的图像效果。因此&#xff0c;我们设计了一个对比组件&#xff0c;它允许用户通过拖动滑块&#xff0c;动态调整两张图像的显示区域&#xff0c;从而清晰…...

电商行业门店管理软件架构设计与数据可视化实践

一、行业痛点与核心诉求 在电商多平台运营成为主流的背景下,企业普遍面临三大管理难题: ​数据碎片化:某头部服饰品牌2023年运营报告显示,其分布在8个平台的162家门店,日均产生23万条订单数据,但财务部门需要5个工作日才能完成跨平台利润核算。​成本核算失真:行业调研…...

基于Arcgis的python脚本实现相邻矢量面的高度字段取平均值

文章目录 背景效果实现逻辑步骤1、准备数据2、python脚本3、执行通过脚本工具箱来执行背景 在地理信息系统(GIS)数据处理或三维建模等实际应用场景中,我们常常会遇到需要对矢量面数据进行精细化处理的需求。其中一个常见的任务便是对相邻的矢量面中的高度字段开展特定操作。…...

基于uniapp的蓝牙打印功能(佳博打印机已测试)

相关步骤 1.蓝牙打印与低功耗打印的区别2.蓝牙打印流程2.1 搜索蓝牙2.2 连接蓝牙 3.连接蓝牙设备4.获取服务5.写入命令源码gbk.jsglobalindex.ts 1.蓝牙打印与低功耗打印的区别 低功耗蓝牙是一种无线、低功耗个人局域网&#xff0c;运行在 2.4 GHz ISM 频段 1、低功耗蓝牙能够…...

Golang的网络流量控制

# Golang的网络流量控制 什么是网络流量控制&#xff1f; 网络流量控制是指针对网络数据传输过程中的流量进行管理和调控的一种技术手段。通过网络流量控制&#xff0c;我们可以对网络中的数据传输速率、带宽使用情况、数据包丢失率等进行监控和调整&#xff0c;以达到优化网络…...

在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案

问题背景 在实际业务中&#xff0c;我们常会遇到数据冗余问题。例如&#xff0c;一个公司表&#xff08;sys_company&#xff09;中存在多条相同公司名的记录&#xff0c;但只有一条有效&#xff08;del_flag0&#xff09;&#xff0c;其余需要删除。删除前需将关联表&#xf…...

Python教程(一):基本语法、流程控制、数据容器

Python&#xff08;一&#xff09; 文章目录 Python&#xff08;一&#xff09;一、基础语法二、数据类型2.1 字符串2.2 空值2.3 类型转换&运算符 三、流程控制3.1 条件判断3.2 循环3.2.1 while循环3.2.2 for循环 四、数据结构4.1 字符串str4.1.1 字符串的格式化输出4.1.1.…...

Spring Boot 3.x 核心注解详解与最佳实践

Spring Boot 3.x 核心注解详解与最佳实践 前言 随着Spring Boot 3.x的正式发布&#xff0c;这个基于Spring Framework 6的里程碑版本带来了诸多新特性。本文将深入剖析Spring Boot 3.x的核心注解体系&#xff0c;结合代码示例讲解其作用及使用场景&#xff0c;助您快速掌握新…...

【AI深度学习基础】PyTorch初探

引言 PyTorch 是由 Facebook 开源的深度学习框架&#xff0c;专门针对 GPU 加速的深度神经网络编程&#xff0c;它的核心概念包括张量&#xff08;Tensor&#xff09;、计算图和自动求导机制。PyTorch作为Facebook开源的深度学习框架&#xff0c;凭借其动态计算图和直观的API设…...

Windows下安装VMware Workstation 17并设置支持MacOS

VMware Workstation 17 介绍 VMware Workstation 17 是 VMware 公司推出的一款强大的桌面虚拟化软件&#xff0c;适用于 Windows 、 Linux 和FreeBSD等操作系统。它允许用户在单一物理计算机上创建、运行和管理多个虚拟机&#xff08;VM&#xff09;&#xff0c;每个虚拟机都可…...

Mysql-主从搭建如何指定库表同步以及新增库表同步

背景&#xff1a; 当主库数据量过大&#xff0c;从库仅需要同步A库的所有表&#xff0c;并且在后续运行中&#xff0c;又提出需要在从库新增B库的users表进行同步。本文会详细列出过程与具体命令&#xff0c;并告诉你其中的深坑&#xff01; 步骤一&#xff1a; 修改从库参数…...