我是蓝牙新手,但已经在 Android 客户端上工作了一个月左右,该客户端连接到 BLE 外设以将数据写入特征。
我的 BLE 外设是 nrf52832 (Nordic) 设备,我已加载 BLE_SM ( security manager ) 示例项目,以便我可以使用绑定(bind)/配对进行安全通信。
我的 Android 代码已成功与外围设备配对/绑定(bind),但从我所看到的情况来看,外围设备现在停止广告。我不确定这是否正常,或者是因为我收到了 REMOTE_USER_TERMINATED_CONNECTION 类型的gap.onDisconnection 事件。
无论如何,我已经绑定(bind)了,所以你会认为我现在不再需要扫描设备,只需调用 device.connectGatt()
,但它不起作用,我的回调得到一个 GATT STATE_DISCONNECTED 事件。
我在另一篇文章中读到,其中粘贴了来自 Nordic 的以下内容( Tutorial ):
It is not possible to connect to a peripheral which is not advertising, even though one knows its address from before. This is because the peripheral will only turn on the receiver for a set amount of time after transmitting an advertisement. This time is used to listen for connection requests and scan requests.
如果这是真的,我似乎无法阻止外设不断地广告,如果我试图降低外设的功耗,这没有帮助。
最佳答案
引用内容 100% 真实。连接设置与设备是否绑定(bind)无关(假设您不使用定向广告)。如果外围设备既没有连接也没有广告,则 radio 完全关闭,因此中央设备无法连接。
如果您想最大限度地减少功耗,请确保在不需要时不转换广告。根据您的用例,您可以提供任何触发广告的内容吗?例如按钮或传感器事件?
如果您需要一直进行广告,可以尝试使用较长的广告间隔来节省电量,但这会增加发现和连接设置时间。
关于android - 我可以连接到非广告的蓝牙绑定(bind)/配对外围设备吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738661/