Android - GATT Server 持续发布广告

Posted

技术标签:

【中文标题】Android - GATT Server 持续发布广告【英文标题】:Android - GATT Server advertise continuosly 【发布时间】:2015-12-23 12:57:03 【问题描述】:

我开发了两个同时实现 GATT 角色的应用程序:服务器和客户端。 在我的例子中,GATT 服务器也是 GAP 外围设备,而 GATT 客户端是 GAP 中心。

我可以连接/断开客户端与服务器的连接,但是当我试图在客户端连接到服务器的那一刻停止广告时,我发现了一些问题。在这种情况下,连接断开。

我无法理解。如果连接了两个设备,服务器应该不需要发送广告包来保持连接......这很奇怪。

我使用的是 SDK 版本 23

【问题讨论】:

【参考方案1】:

在您的GattServerCallback 中收到STATE_CONNECTED 后,在停止广告之前,运行mGattServer.connect(device, false); 告诉傻瓜android“嘿,我想保持此连接有效!”!

【讨论】:

【参考方案2】:

根据 BLE 规范,以下是允许的:处于连接状态的设备可以同时具有主从角色。主设备和从设备可能有多个连接。唯一的限制如下:两个 BLE 设备不能同时作为彼此的主从设备,因为 两个 BLE 设备一次只能有一个连接。

虽然 BLE 规范规定了这些规则,但限制同时发生的连接数量和其他 BLE 事件数量的是设备中的 BLE 芯片。如果您在 BLE 上看到意外行为,我建议您使用具有不同 BLE 芯片的不同设备尝试相同的操作。

连接建立后,下层的任务是保持连接处于活动状态。您无需使用 API 执行任何操作。如果设备处于连接状态,则连接可能不稳定,以防同时广告,具体取决于芯片的能力。

【讨论】:

感谢您的回复。我同意保持连接活动不是应用程序的任务,但是如果我在建立连接时尝试停止广告,设备会自动断开连接。我会停止广告以阻止其他设备连接到我的 GATT 服务器,最重要的是减少功耗。

以上是关于Android - GATT Server 持续发布广告的主要内容,如果未能解决你的问题,请参考以下文章

Android 蓝牙低功耗 Gatt 服务实现错误

Android 4.0 中的蓝牙智能 (4.0) / GATT 支持?

java Android gatt回调示例。

在 Android 低功耗蓝牙上读取 GATT 属性的问题

找出 Android 蓝牙 LE GATT 配置文件

BLE GATT 上传数据 - Android