Android 低功率蓝牙之BluetoothGattCallback回调方法详解
BluetoothGattCallback
是 Android 中用于处理蓝牙低功耗(BLE)设备通信的核心回调类。它负责处理与 BLE 设备的连接、服务发现、数据读写等操作的结果。以下是对 BluetoothGattCallback
的详细解析:
1. onConnectionStateChange
-
触发时机:当与 BLE 设备的连接状态发生变化时触发。
-
参数:
-
gatt
:BluetoothGatt
对象,表示当前连接的 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 设备的服务完成时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
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
-
触发时机:当读取特征值完成时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
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
-
触发时机:当写入特征值完成时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
characteristic
:被写入的特征对象。 -
status
:写入操作的结果,BluetoothGatt.GATT_SUCCESS
表示成功。
-
-
常见操作:
-
确认写入操作是否成功。
-
java
复制
@Override public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { // 写入成功 } }
5. onCharacteristicChanged
-
触发时机:当特征值发生变化时触发(通常是由于通知或指示)。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
characteristic
:发生变化的特征对象。
-
-
常见操作:
-
处理特征值的变化。
-
java
复制
@Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { byte[] data = characteristic.getValue(); // 处理变化的数据 }
6. onDescriptorRead
-
触发时机:当读取描述符完成时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
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
-
触发时机:当写入描述符完成时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
descriptor
:被写入的描述符对象。 -
status
:写入操作的结果,BluetoothGatt.GATT_SUCCESS
表示成功。
-
-
常见操作:
-
确认写入操作是否成功。
-
java
复制
@Override public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { // 写入成功 } }
8. onReadRemoteRssi
-
触发时机:当读取远程设备的 RSSI(信号强度)完成时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
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(最大传输单元)大小发生变化时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
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)更新完成时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
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)信息完成时触发。
-
参数:
-
gatt
:BluetoothGatt
对象。 -
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 设备交互的各种回调方法。开发者需要根据具体的业务需求,实现这些回调方法来处理连接、服务发现、数据读写等操作的结果。