我正在使用两台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 ?
提前感谢您的帮助!
一些文档:
答案 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列表»。看到这个使用有点不寻常。