可以使用SparseArray来存储多个设备的Gatt对象,在订阅通知时使用该设备的Gatt对象。示例代码如下:
private SparseArray
// 连接BLE设备 public void connect(final String address) { final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); if (device == null) { Log.e(TAG, "Device not found!"); return; } mGattDevices.clear(); mGatt = device.connectGatt(this, false, mGattCallback); mGattDevices.put(0, mGatt); }
// 订阅通知 public void subscribe(final int deviceIndex, final UUID serviceUuid, final UUID characteristicUuid) { final BluetoothGatt gatt = mGattDevices.get(deviceIndex); if (gatt == null) { Log.e(TAG, "Gatt not found!"); return; } final BluetoothGattService service = gatt.getService(serviceUuid); if (service == null) { Log.e(TAG, "Service not found!"); return; } final BluetoothGattCharacteristic characteristic = service.getCharacteristic(characteristicUuid); if (characteristic == null) { Log.e(TAG, "Characteristic not found!"); return; } gatt.setCharacteristicNotification(characteristic, true); final BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString(CLIENT_CHARACTERISTIC_CONFIG)); descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); gatt.writeDescriptor(descriptor); }