android - 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,我的问题在于发送第一个命令的逻辑,有时我发送此命令而微控制器尚未启动,这可能是它得到的原因只是命令的一部分。
解决方案
不知道你所说的名字冲突是什么意思,但Android总是会写你告诉它写的东西,没有丢包,只要你遵守规则永远不会有超过一个未完成的操作(总是在你发送下一个之前等待回调操作),并且您的数据必须适合相应操作的最大长度。
推荐阅读
- php - 如何在cakephp 4中为没有主键但只有外键的表进行蛋糕烘焙
- c# - 扩展方法:“访问非静态成员需要对象引用”在 Travis CI 中运行时引发错误
- python - 无法从 python 中的 json 数组获取嵌套对象
- python - 在游戏循环中发出异步请求(Python/Pygame)
- javascript - JavaScript 仅从数组中提取值
- javascript - 我需要帮助才能在 JavaScript 中获取 URL
- swift - 过滤 ForEach 时 SwiftUI 导航链接不起作用
- java - 将字符串“5m 12s 635ms”转换为“05:12:635”
- android - Sqflite rawQuery 在真正的三星设备上不起作用
- python - “NoneType”对象不可迭代 - 数组