首页 > 解决方案 > android是否可以通过BLE丢失通过蓝牙写入特征的命令的一部分?

问题描述

我正在为一个安卓应用程序开发一个适配,以与一个遥控器进行通信,它有一些预定义的命令。我已经按照这个实现来进行蓝牙通信,并且它在一段时间内工作正常。这个应用程序应该每 5 分钟或更短时间与遥控器通信一次,我已经使用该应用程序近 6 个月了。上周我遇到了一些命令冲突问题,查看日志我无法确定为什么会发生这种情况。上次发生这种情况时,应用程序运行超过 24 小时,与遥控器通信,没有任何通信问题。其中两个命令有一些相似的字符,第一个必须完成,以建立连接。

OK_CONN

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

ñ

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

我在 Sony XPeria XZ 手机上使用 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 可能被接受为命令。我刚刚意识到发生了什么,您可以将其作为答案发布@Emil,我的问题在于发送第一个命令的逻辑,有时我发送此命令而微控制器尚未启动,这可能是它得到的原因只是命令的一部分。

标签: androidbluetooth-lowenergy

解决方案


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


推荐阅读