Android 4.3 BTLE 作为服务器 : How to start advertisements?

标签 android bluetooth-lowenergy

我正在尝试使用 4.3 中的新 BTLE API 在 Nexus 7 上实现 BTLE SERVER。我遇到了几个问题。首先,SDK 没有示例。唯一的例子是客户端。其次,文档实际上告诉你做错事。它声明必须使用带有 BluetoothProfile.GATT_SERVER 参数的 BluetoothAdapter.getProfileProxy() 来获取 BluetoothGattServer 对象。这种方法可行,但无法将 BluetoothGattServerCallback 的实现链接到 BLE 堆栈。 (此回调是响应客户端读写请求的方式。)然而,在遇到问题 58582 后,开发人员指出了新的 BluetoothManager.openGattServer() 方法,该方法将您的回调作为参数并返回一个 BluetoothGattServer 对象。嗯,解决了一个问题。

下一个问题更成问题。 BluetoothGattServer 文档指出,可以使用此类来创建和宣传蓝牙 LE 服务和特性。创建服务等不是问题,但他们忽略了如何开始做广告。类本身或我能找到的任何其他类中没有方法。

有人知道怎么做吗?目前我所能看到的只是使用与客户相同的方法,但该方法涉及扫描(不是广告)。所有文档进一步表明 BluetoothAdapter.startLeScan() 确实只是用于扫描。

那么,一旦我的所有服务、特征和描述符就位,我该如何调用广告呢?

最佳答案

据我了解,Android 实现只能充当中央设备,而不能充当外围设备。在低功耗蓝牙中,只有外围设备可以做广告。中央设备可以扫描来自外围设备的广告,并发送连接请求作为对(某些类型的)广告的回复,以创建与外围设备的连接。

在BLE中,Central/PeripheralServer/Client这两个概念是有区别的:

  • Central/Peripheral 与网络架构有关,其中 Central 是星形中的集线器,连接一个或多个外围设备。它通常是手机、平板电脑或计算机。一个外围设备一次只能连接一个中心。

  • 服务器/客户端(GATT 服务器/客户端)是一个更高级别的概念,与保存在设备中并可能通过连接进行通信的数据相关。中央设备和外围设备都可以实现 GATT 服务器和 GATT 客户端,但不需要同时具备。

所以回答你的问题:你不能调用广告。您必须开始扫描外围设备才能连接到其中的一个或多个。

希望这会有所帮助。

关于Android 4.3 BTLE 作为服务器 : How to start advertisements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18128280/

相关文章:

Android - 如何为所有页面添加标题?

java - 谷歌任务 API : How can I find the TaskList of a Task?

android - 是否可以为少数人开发一个应用程序?

android - 升级到 Studio 1.4 后的模拟器错误

ios - swift 4 iOS : Does not discover services of connected BLE device

android - 使用 ScanSettings.SCAN_MODE_OPPORTUNISTIC '应用程序扫描太频繁'

android - 将 netbeans android 项目导入 android studio

ios - 具有特定服务 uuid 的 ScanPeripherals

c# - Windows 蓝牙 le GetGattServicesAsync 方法中的错误

android - 如何修复 Nexus 5 上的 Android BLE SCAN_FAILED_FEATURE_UNSUPPORTED?