Android开发 - BluetoothGattCallback 类处理蓝牙 (BLE) 设备的连接和通信解析
BluetoothGattCallback 是什么
- BluetoothGattCallback 是一个抽象类,用于接收 BLE 设备的各种回调事件。这些事件包括连接状态的变化、服务的发现、特性的读取和写入等
BluetoothGattCallback 的主要方法
-
onConnectionStateChange(BluetoothGatt gatt, int status, int newState)
:当设备的连接状态发生变化时调用。比如:设备连接成功或断开连接@Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { // 检查连接状态是否成功 if (status == BluetoothGatt.GATT_SUCCESS) { // 检查新的连接状态是否为已连接 if (newState == BluetoothProfile.STATE_CONNECTED) { Log.i("BluetoothGattCallback", "Connected to GATT server."); // 连接成功,开始发现服务 gatt.discoverServices(); } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { Log.i("BluetoothGattCallback", "Disconnected from GATT server."); // 连接断开 } } else { // 连接状态变化失败,记录警告 Log.w("BluetoothGattCallback", "Connection state change failed: " + status); } }
- 参数解析:
- gatt:代表当前的 GATT 连接
- status:连接的状态码(通常是
BluetoothGatt.GATT_SUCCESS
表示成功) - newState:新的连接状态(
BluetoothProfile.STATE_CONNECTED
或BluetoothProfile.STATE_DISCONNECTED
)
- 参数解析:
-
onServicesDiscovered(BluetoothGatt gatt, int status)
:当 BLE 设备的服务被发现时调用。这是在连接成功后进行服务发现时触发的回调@Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { // 检查服务发现是否成功 if (status == BluetoothGatt.GATT_SUCCESS) { Log.i("BluetoothGattCallback", "Services discovered."); // 遍历发现的服务 for (BluetoothGattService service : gatt.getServices()) { // 打印每个服务的 UUID Log.i("BluetoothGattCallback", "Service UUID: " + service.getUuid()); } } else { // 服务发现失败,记录警告 Log.w("BluetoothGattCallback", "Service discovery failed: " + status); } }
-
参数解析:
-
gatt:代表当前的 GATT 连接
-
status:服务发现的状态码(通常是
BluetoothGatt.GATT_SUCCESS
表示成功)
-
-
-
onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status)
:当读取特性值的操作完成时调用。此时可以获取特性的值@Override public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { // 检查读取操作是否成功 if (status == BluetoothGatt.GATT_SUCCESS) { // 获取读取到的特性值 byte[] value = characteristic.getValue(); // 打印特性值 Log.i("BluetoothGattCallback", "Characteristic read: " + Arrays.toString(value)); } else { // 读取操作失败,记录警告 Log.w("BluetoothGattCallback", "Characteristic read failed: " + status); } }
-
参数解析:
-
gatt:代表当前的 GATT 连接
-
characteristic:被读取的特性对象
-
status:读取操作的状态码
-
-
-
onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status)
:当写入特性值的操作完成时调用@Override public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { // 检查写入操作是否成功 if (status == BluetoothGatt.GATT_SUCCESS) { // 写入成功,记录信息 Log.i("BluetoothGattCallback", "Characteristic written successfully."); } else { // 写入操作失败,记录警告 Log.w("BluetoothGattCallback", "Characteristic write failed: " + status); } }
-
参数解析:
-
gatt:代表当前的 GATT 连接
-
characteristic:被写入的特性对象
-
status:写入操作的状态码
-
-
-
onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic)
:当特性值发生变化时调用。这通常是因为设备向手机推送了新的数据@Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { // 设备推送的数据发生变化 byte[] value = characteristic.getValue(); // 打印变化后的特性值 Log.i("BluetoothGattCallback", "Characteristic changed: " + Arrays.toString(value)); }
-
参数解析:
-
gatt:代表当前的 GATT 连接
-
characteristic:发生变化的特性对象
-
-
-
onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status)
:当读取描述符的操作完成时调用@Override public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { // 检查读取操作是否成功 if (status == BluetoothGatt.GATT_SUCCESS) { // 获取读取到的描述符值 byte[] value = descriptor.getValue(); // 打印描述符值 Log.i("BluetoothGattCallback", "Descriptor read: " + Arrays.toString(value)); } else { // 读取操作失败,记录警告 Log.w("BluetoothGattCallback", "Descriptor read failed: " + status); } }
-
参数解析:
-
gatt:代表当前的 GATT 连接
-
descriptor:被读取的描述符对象
-
status:读取操作的状态码
-
-
-
onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status)
:当写入描述符的操作完成时调用@Override public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { // 检查写入操作是否成功 if (status == BluetoothGatt.GATT_SUCCESS) { // 写入成功,记录信息 Log.i("BluetoothGattCallback", "Descriptor written successfully."); } else { // 写入操作失败,记录警告 Log.w("BluetoothGattCallback", "Descriptor write failed: " + status); } }
-
参数解析:
-
gatt:代表当前的 GATT 连接
-
descriptor:被写入的描述符对象
-
status:写入操作的状态码
-
-
-
onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status)
:当读取远程设备的信号强度指示 (RSSI) 完成时调用@Override public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) { // 检查读取操作是否成功 if (status == BluetoothGatt.GATT_SUCCESS) { // 打印远程设备的信号强度 Log.i("BluetoothGattCallback", "RSSI read: " + rssi); } else { // 读取操作失败,记录警告 Log.w("BluetoothGattCallback", "RSSI read failed: " + status); } }
-
gatt:代表当前的 GATT 连接
-
rssi:设备的信号强度
-
status:读取操作的状态码
-
总结
- BluetoothGattCallback 类的主要作用是监听和处理与 BLE 设备交互的各种事件。通过重写这些方法,你可以处理设备的连接、读取和写入数据、接收数据变化等操作,从而实现与 BLE 设备的有效通信