是否有可能 android 丢失通过蓝牙通过 BLE 写入特性的命令的一部分?

Is it possible to android to lost part of a command writen to a characteristic via BlueTooth via BLE?

我正在为 android app, to communicate with a remote control 开发一个改编版,它有一些预定义的命令。 我已经按照 this 实施来进行蓝牙通信,并且它在一段时间内运行良好。 这个应用程序应该每 5 分钟或更短时间与遥控器通信一次,我已经使用这个应用程序将近 6 个月了。上周我遇到了一些命令冲突问题,查看日志我无法确定为什么会发生这种情况。上次发生这种情况时,应用程序 运行 超过 24 小时,与遥控器通信,没有任何通信问题。 它的两个命令有一些相似的字符,第一个必须完成,才能建立连接。

OK_CONN

还有一个嗅探器命令,可以让飞行员保持清醒,监听一些传感器数据:

N

查看日志,在应用命令 OK_CONN 后,我可以看到命令 N 的答案。 在建立的通信过程中,蓝牙命令是否有可能丢失部分数据,或者我在写入特性时做错了什么?我应该更改命令名称以避免这种冲突吗?

我在 Sony XPeria XZ phone 上使用 android 9。

编辑以澄清@Emil 评论

07:02:12.880 [BleThread] writing <OK+CONN> to characteristic 
07:02:12.368 [Binder:19249_F] [onCharacteristicChanged():274]: 
n command confirme

查看日志,我看到最后写入的命令是 ok_conn 但它只写入了 N,这被显示为最后一行,它已确认单独接收 n 命令,而不是接收 ok_conn 的完整数据。 通过名称冲突,我的意思是可能 ok_conn 命令的最后一个 N 被接受为命令。 我刚刚意识到发生了什么,你可以 post 作为答案 @Emil,我的问题出在发送第一个命令的逻辑上,有时我发送这个命令但微控制器还没有启动,这可能是它只获得命令的一部分的原因。

不知道你说的名字冲突是什么意思,但是Android会一直写你告诉它写的,不会丢包,只要你遵守规则,永远不会有超过一个未完成的操作(在发送下一个操作之前始终等待回调)并且您的数据必须符合相应操作的最大长度。