【发布时间】:2021-07-24 17:59:32
【问题描述】:
我正在开发第一个低功耗蓝牙应用。我控制着两端——服务器在 Arduino Nano 33 BLE 上运行——它有一个 nRF 芯片组。
服务器有点奇怪——它实际上运行两组代码中的一组,具体取决于它的启动方式(主要是因为我只有一个 Nano BLE)。所以它可以是两台服务器之一(相同的 MAC 地址),但服务器 A 支持一个服务及其一组特性,服务器 B 支持另一项具有其特性的服务。两种服务显然都有唯一的 UUID。
问题是,当应用程序已连接到 - 比如说 - A,并且服务器关闭并以伪装 B 重新打开时,在连接和发现服务时,应用程序仍然“发现”A 服务 UUID,而不是 B。
反复重启服务器没有任何区别,在 Android 设备上禁用和重新启用蓝牙或重新启动应用程序也没有任何区别。唯一可行的方法是完全重启 Android 设备。
在我看来,BLE 堆栈正在缓存它认为特定服务器 MAC 地址的功能。
找不到解决方法(不要认为我可以更改 Nano BLE MAC 地址),但是当我运行 nRF 诊断 Android 应用程序时,它确实找到了正确的服务,所以它一定是可能的。不过,这样做总是首先通过 BLE 扫描过程,因此可能会刷新任何缓存。
但是,我真的不想强制执行扫描,因此非常感谢任何 cmets,或有关如何清除任何缓存的详细信息。
【问题讨论】:
标签: android bluetooth-lowenergy uuid mac-address