BLE与Android 5.0:如何让设备充当中央和服务器?

时间:2015-05-24 17:11:46

标签: android bluetooth bluetooth-lowenergy gatt pairing

我正在使用两台Android 5.0设备通过蓝牙低功耗进行通信,我不想:

  • 设备1 充当中央和服务器

  • 设备2 充当外围设备和客户端

这是我想要实现的行为:

1)设备2开始广告(外围角色)。

2)设备1开始扫描(中心角色),并通过ScanCallback的onScanResult方法获取广告设备(BluetoothDevice对象)。

3)我现在希望通知广告设备(设备2)它已经被扫描并且能够获得与设备1相关联的蓝牙设备。

4)设备1有一个BluetoothGattServer实例。设备2现在将在设备1上调用connectGatt(上下文上下文,布尔autoConnect,BluetoothGattCallback回调)以获取BluetoothGatt的实例。

5)最后,设备1是服务器,设备2是客户端。

到目前为止,我发现在步骤2中,一旦设备1持有设备2的蓝牙设备,它就只能像使用connectGatt一样在步骤4中作为客户端连接。

我或许可以使用设备1中定义的 BluetoothGattServer ,并使用设备 gattServer.connect(BluetoothDevice device,boolean autoConnect) em>是设备2.

如何通知设备2它已连接到?

如果我无法在 connectGatt(Context,boolean,BluetoothGattCallback),我将如何在设备2中获取 BluetoothGatt 的实例? > BluetoothDevice ?

提前感谢您的帮助!

一些文档:

BluetoothGattServer

BluetoothDevice

2 个答案:

答案 0 :(得分:1)

1)设备2开始广告(外围角色)。

外围角色会做广告,请务必添加CONNECTABLE

BluetoothGattServerCallback'onConnectionStateChange

并相应地开始广告。

2)设备1开始扫描(中心角色),并通过ScanCallback的onScanResult方法获取广告设备(BluetoothDevice对象)。

完美,现在在此设备(外围设备)上调用connectGatt,确保在获得所需设备后停止播放广告,否则您将最终发送多个连接命令。

3)我现在希望通知广告设备(设备2)它已经被扫描并且能够获得与设备1相关联的蓝牙设备。

当您从中心/客户端角色调用connectGatt时,您的外围设备将在其NSString *string = @"do nothing"; 中收到通知。

您将知道已建立连接。虽然你必须在外围方面注册gatt服务。

4)设备1有一个BluetoothGattServer实例。设备2现在将在设备1上调用connectGatt(上下文上下文,布尔autoConnect,BluetoothGattCallback回调)以获取BluetoothGatt的实例。

错误,设备1将启动连接,如我在第3点中所述。将调用设备的onConnectionStateChange以知道已建立连接。

5)最后,设备1是服务器,设备2是客户端。

错误,设备2是外围设备(服务器),设备1是监控器(客户端)

答案 1 :(得分:0)

你必须转过身来。 扫描仪是连接广告商的扫描仪。 Dev1扫描dev2 adv和扫描响应。然后dev1应该连接。 Dev2将在连接时获得回调。 当有人在Android上听到您的adv或请求扫描响应时,没有回调。 如果您想要通过某种服务来连接您的服务器的广告请求,请从btsig检查0x14«16位服务请求UUID列表»。看到这个使用有点不寻常。