Ada*_*gyi 5 android android-bluetooth android-ble
我的应用程序执行以下操作:
onDescriptorWrite它向 BT 设备发送命令。
一旦 BT 设备收到此命令,它就会开始向 Android 手机传输数据。
AndroidonCharacteristicChanged正在捕获从 BT 设备发送的所有数据。
所有数据传输完毕后,Android 应用程序会将其写入文件。
我已经对其进行了测试,一切在三星(Android 11)、OnePlus(Android 11)和小米(Android 9)上运行得非常完美,但来自诺基亚(Android 11)的数据onCharacteristicChanged被损坏。
此测试示例显示将传输的数据写入带有校验和的文件中。正如你所看到的,我在小米上得到了完全相同的字节,但在诺基亚上它有时会被损坏。
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)
Run Code Online (Sandbox Code Playgroud)
面对这个问题,我完全无法理解,这是 Android 的又一个支离破碎且不可靠的生态系统。
我尝试过以下方法:
将我的BluetoothGatt实例设置为CONNECTION_PRIORITY_HIGH模式requestConnectionPriority
使用synchronized数据容器以防onCharacteristicChanged万一这是某个多线程写入相同容器类型的错误。
他们都没有帮忙。
有什么见解吗?
编辑:
我的同事制作了一个固件,它只发送递增的数字。正如您在红色区域中看到的,即使使用Nordic 自己的 nRF 工具箱应用程序,数据也已损坏。
这意味着这款诺基亚无法正常工作,仅此而已?这是否仅是该设备的硬件问题?
看起来智能手机上的实现存在一些差异。尝试做这些事情:
onCharacteristicChanged)放入线程安全集合中。最好将每个块包装在一个结构中 ( {data: ByteArray, device: *, something else...})。onCharacteristicChanged并在我们自己的线程上以方便的方式处理它们。| 归档时间: |
|
| 查看次数: |
876 次 |
| 最近记录: |