1

我等待onCharacteristicChanged()回调通过 BLE 接收数据。但是,如果 BluetoothDevice 一次发送太多 20 字节的数据包,我最多会收到 10 个通知,而不是预期的 46 个 907 字节长的消息。少量的数据会被通知就好了。

在 onServicesDiscovered(BluetoothGatt gatt, int status) 我通过以下方式注册通知:

public void onServicesDiscovered(BluetoothGatt gatt, int status) {
  if (status == BluetoothGatt.GATT_SUCCESS) {
    mService = mGatt.getService(SERVICE_UUID);
    mCharacteristic = mService.getCharacteristic(CHARACTERISTIC_UUID);
    mGatt.setCharacteristicNotification(characteristic, enabled);
    BluetoothGattDescriptor descriptor =
            characteristic.getDescriptor(UUID.fromString(CLIENT_CHARACTERISTIC_CONFIG));
    descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
    mGatt.writeDescriptor(descriptor);            
  }
}

我是否必须以某种方式承认我获得了数据onCharacteristicChanged()

BluetoothDevice 通过将大于 20 字节的消息拆分为 20 字节块来发送消息。通常这些消息小于 200 字节。但是,当 BluetoothDevice 发送超过 900 个字节长的消息时,应用程序只能通过onCharacteristicChanged()其中 200 个字节获得通知。

这些更大的消息在 iOS 上接收得很好。

4

1 回答 1

1

BLE 堆栈目前有点损坏,有一个已知的错误,涉及太多的数据包和读取多个特征。根据主题演讲中的幻灯片,BT 堆栈将在 L 版本中得到很大改进(包括从机和中心模式)

于 2014-06-26T00:20:13.393 回答