【问题标题】:Android BLE - How is large characteristic value read in chunks (using an offset)?Android BLE - 如何以块的形式读取大特征值(使用偏移量)?
【发布时间】:2016-07-29 01:07:23
【问题描述】:

我正在使用 Android SDK 的 android.bluetoothandroid.bluetooth.le API。

我想实现一个应用程序(扮演中心角色,并连接到 BLE 外围设备以读取特征值和描述符)。

应用需要读取的特征值很大,因此需要分块读取。我对如何实现这一点的理解是,应用程序应在读取请求中包含一个偏移量,该偏移量向外围设备指示要在响应中返回的总数据的子部分。

但是,API 只提供了一个BluetoothGatt.readCharacteristic(BluetoothGattCharacteristic) 方法。我找不到包含偏移量参数的读取特征 API 调用,用于发出我在上一段中描述的部分读取特征请求的类型。

有人知道我是如何实现这些分块特征读取的吗?

注意:我知道有一个类似的堆栈溢出问题here。它没有为我正在处理的 Android 方面提供答案。

【问题讨论】:

    标签: android bluetooth-lowenergy


    【解决方案1】:

    只需调用 readCharacteristic,它就会在后台读取所有块。当所有的 chunk 都被读取后,onCharacteristicRead 会被调用。

    【讨论】:

    • 好的,但是 GATT 客户端在发出特征读取请求时不应该能够指定偏移量吗?如果客户端已经读取了一些特征值,因此只需要通过包含适当偏移量的请求读取剩余部分,该怎么办?
    • 是的,你是对的。但是 GATT 客户端位于 Android 的蓝牙堆栈中,它能够请求不同的偏移量。 GATT 客户端和应用程序之间的外部 API 没有由任何标准定义,因此 Android 可以包含或排除他们想要的任何功能。而且它们确实没有包含“从偏移量读取”功能。
    • 谢谢,正如您所描述的,我看到蓝牙堆栈负责将被读取的值分解为更小的、单独的响应。你知道是什么触发了这种行为吗?当传递给BluetoothGattServer.sendResponse(...., byte[] value) 的byte[] value 参数等于或超过最大长度时是否触发?
    • 当 Android 的 gatt 客户端获得最大可能长度的读取响应时,它会发出更多读取 blob 请求以获取其余的直到结束。
    • 正如你所提到的,我已经请求从 Peripheral 读取特征,并且在我的外围设备上,我在 sendResponse() 方法上添加了 byte [] 数组。但在我的情况下,由于byte [] 的大小超过20 个字节,onCharacteristicReadRequest() 方法多次调用,因此数据被附加。我试图通过将byte [] 分成多个byte [] 数组来解决这个问题,这是可行的,但我丢失了一些数据。
    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 2016-07-26
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多