gpt4 book ai didi

Android 蓝牙 (BLE) onCharacteristicChanged 上的数据损坏

转载 作者:行者123 更新时间:2023-12-04 23:49:24 25 4
gpt4 key购买 nike

我的应用程序执行以下操作:

  • 它使用 onDescriptorWrite 发送命令到 BT 设备。
  • BT 设备一收到此命令 它开始传输数据到安卓手机。
  • 安卓的onCharacteristicChanged捕获所有数据从 BT 设备发送。
  • 传输完所有数据后,Android 应用程序会将其写入文件。

  • 我已经测试过了 在三星 (Android 11)、一加 (Android 11) 和小米 (Android 9) 上一切正常 ,但数据来自 onCharacteristicChanged在诺基亚(Android 11)上损坏。
    该测试示例显示了将传输的数据写入带有校验和的文件中。 正如你所看到的,我在小米上得到了完全相同的字节,但在诺基亚上它有时会被破坏。
    Tested on Xiaomi MiA1 (Android 9)

    File_MD5: The right file MD5 -> AE36F08213B25B5E0EE19425257D0D85

    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)
    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)
    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)
    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)
    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)
    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)
    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)
    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)
    File_MD5: Measurement file MD5: AE36F08213B25B5E0EE19425257D0D85 (ok)


    Tested on Nokia 5.4 (Android 11)

    File_MD5: The right file MD5 -> BCF704DD811A760B5602C20DEDB61AF8

    File_MD5: Measurement file MD5: BCF704DD811A760B5602C20DEDB61AF8 (ok)
    File_MD5: Measurement file MD5: E65A5D38EB3D8BF4E1AF5240DFBE1840 (ERROR)
    File_MD5: Measurement file MD5: BCF704DD811A760B5602C20DEDB61AF8 (ok)
    File_MD5: Measurement file MD5: BCF704DD811A760B5602C20DEDB61AF8 (ok)
    File_MD5: Measurement file MD5: BCF704DD811A760B5602C20DEDB61AF8 (ok)
    File_MD5: Measurement file MD5: BCF704DD811A760B5602C20DEDB61AF8 (ok)
    File_MD5: Measurement file MD5: 0D3A577631A115FBAF3324A9B09244A8 (ERROR)
    File_MD5: Measurement file MD5: A6FB1334D7AA1520F105ACB1EC1324C5 (ERROR)
    File_MD5: Measurement file MD5: BCF704DD811A760B5602C20DEDB61AF8 (ok)
    File_MD5: Measurement file MD5: BCF704DD811A760B5602C20DEDB61AF8 (ok)

    在这个问题面前,我绝对无法理解, Android 的又一个支离 splinter 且不可靠的生态系统。

    我尝试了以下方法:
  • 设置我的BluetoothGatt实例到 CONNECTION_PRIORITY_HIGH使用 requestConnectionPriority 的模式
  • 使用 synchronized onCharacteristicChanged 中的数据容器如果这是一些多线程写入相同容器类型的错误。

  • 他们都没有帮助。
    有什么见解吗?
    E D I T:
    我的同事做了一个固件 只是发送递增的数字。 正如您在红色区域中看到的, 数据已损坏,即使使用 Nordic's own nRF toolbox app.
    我应该担心吗?
    这意味着这个诺基亚是行不通的,是这样吗?这可能只是此设备的硬件问题吗?
    enter image description here

    最佳答案

    似乎该智能手机的实现存在一些差异。尝试做这些事情:

  • 将每个数据 block (从 onCharacteristicChanged 检索)放入线程安全集合。最好将每个 block 包装在一个结构中( {data: ByteArray, device: *, something else...} )。
  • 在后台线程中处理每个 block 以避免 UI 卡住。
    这样做的主要原因是,一些设备内部正在积极使用字节缓存,这可能会损坏数据,我们应该从 onCharacteristicChanged 复制字节尽快,他们在我们自己的线程上以一种方便的方式处理。
  • 关于Android 蓝牙 (BLE) onCharacteristicChanged 上的数据损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70970945/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com