【问题标题】:Android BLE, read and write characteristicsAndroid BLE,读写特性
【发布时间】:2014-06-03 06:12:19
【问题描述】:

我目前正在开发 Android BLE,在 Android BLE 堆栈方面遇到了很多问题..

我的开发工具是搭载 Android 4.3 的三星 Galaxy J。

我想知道如何从 BLE 读取特征并写入特征(就像我验证收到的数据,然后使用 BLE 发送另一个数据)

我在理解 Android BLE 回调如何工作时遇到了严重问题, 这5个功能我看不懂……而且说明书也不清楚,哪位好心人能用简单的形式解释一下???

onCharacteristicWrite
onCharacteristicRead
onCharacteristicChanged
onDescriptorRead
onDescriptorWrite

我目前的情况是,我设法在 onCharacteristicChanged() 回调中读取数据,然后验证接收到的数据我尝试使用发送数据

characteristics.setValue(data)
gatt.writeCharacteristic(characteristics)

但是,Android BLE 堆栈没有调用 onCharacteristicsWrite(),事实上,Android 只是挂在那里..

我尝试用谷歌搜索有关 Android BLE 的信息,没有太多信息,只有一堆关于 BLE 堆栈不稳定的抱怨......

【问题讨论】:

    标签: android bluetooth-lowenergy android-bluetooth


    【解决方案1】:

    来自 Android BLE 的每个回调都有其功能;

    onDescriptorRead 和 onDescriptorWrite

    这用于写入/读取BLE设备的配置设置,一些制造商可能需要向BLE设备发送一些数据并通过读取确认,然后才能连接到BLE设备

    onCharacteristicWrite

    这用于向 BLE 设备发送数据,通常在 BLE 设备的数据模式下。 键入时调用此回调

    gatt.writeCharacteristic(characteristics);
    

    onCharacteristicRead

    这用于从 BLE 设备读取数据 编写此代码时会调用回调

    gatt.readCharacteristic(characteristics);
    

    onCharacteristicChanged

    当您尝试使用 writeCharacteristic(characteristics) 发送数据并且 BLE 设备以某个值响应时调用此回调。

    通常 BLE 设备的特性很少,为了简单起见,我列举几个特性

    • - 写特征
    • 阅读 - 阅读特征

    明确一点,当你发送数据时,你需要使用 WRITE 特性,然后当 BLE 设备响应时,Android 应用会调用 READ 特性

    需要注意的一个非常重要的一点是,Android BLE 堆栈允许您一次只编写一个特性!!

    示例:如果您尝试同时调用两次写入特性

    gatt.writeCharacteristic(characteristics);
    gatt.writeCharacteristic(characteristics);
    

    Android BLE 栈不会发出第二次写入特性!

    【讨论】:

    • 我为writeCharacteristic 为我发送的每个特定命令创建了一个包装函数。其中每一个都是由用户和应用程序本身触发的。我是否应该将所有这些函数标记为synchronized 以避免堆叠多个writeCharacteristic
    • 是的.. synchronized 或在每个请求之间有一些延迟后调用它们
    • 嗨@Kushal!。延迟多少?
    • @Marie Amida 延迟取决于 ble 设备硬件的缓冲处理能力,这种方式不是完全证明的,以后可能随时需要更改延迟,所以最好使用@ 987654328@方式,我会建议
    • “需要注意的一个非常重要的一点是,Android BLE 堆栈允许您一次只写入一个特性!!” 当 BLE 写入类型为“WRITE_TYPE_NO_RESPONSE”时,这是否也是如此“?
    【解决方案2】:

    setValue:characteristics.setValue(data) 之前,您应该使用gatt.setCharacteristicNotification(Char,true)setNotification

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2014-12-10
      • 2013-12-01
      • 1970-01-01
      • 2014-02-13
      • 2018-02-11
      相关资源
      最近更新 更多