【问题标题】:Android Device as BLE peripheral and GATT clientAndroid 设备作为 BLE 外围设备和 GATT 客户端
【发布时间】:2017-01-24 16:09:05
【问题描述】:

我正在尝试构建一个充当 BLE 外围设备和 GATT 客户端的 Android 应用程序。

这些是我想要实现的步骤:

  1. Android 设备开始宣传自己。第二台设备开始扫描,并在检测到 Android 设备后立即启动连接。

  2. Android 设备充当 GATT 客户端并尝试连接到服务器设备。

第一步似乎工作正常,我可以做广告,而另一台设备(在我的例子中是 Bluegiga Evalboard)能够看到 Android 设备并可以建立连接。

但是我如何在 Android 设备上通知可以建立连接以调用函数device.connectGatt(context, false, gattCb) 连接到 GATT 服务器?

我也尝试过启动广告后获取远程设备。

BluetoothDevice device = bleAdapter.getRemoteDevice(remoteAddress); device.connectGatt(context, false, gattCb);

唯一发生的事情是,从 BluetoothGattCallback 调用 onConnectionStateChange(BluetoothGatt gatt, int status, int newState) 函数只是为了通知我设备已断开连接。

我错过了什么?

【问题讨论】:

  • 我知道我可能无法从描述中了解您的完整想法,但看起来 Android 设备广告本身是不必要的。如果想法是 Evalboard 是 GATT 服务器,那么它应该宣传自己。如果 Android 设备应该作为 GATT 客户端连接到服务器,那么它应该正在扫描设备。一旦 Android 设备发现 GATT 服务器设备,它就可以尝试连接到 GATT 服务器。现在您的客户端正在为自己做广告,而您的服务器正在扫描客户端,这似乎完全倒退到了应有的方式。
  • 这正是本次测试的重点,我们想要反转拓扑,以确定它是否可以更节能、更可靠。
  • 我也在尝试实现同样的目标。这是否可以在这 1 个设备中使用 ble 在两个 android 设备之间发送小字节,作为 gatt 和其他作为外围设备工作?

标签: android bluetooth-lowenergy


【解决方案1】:

我建议在广告期结束后尝试使用BluetoothAdapter 中的getBondedDevices 方法,而不是像您那样使用getRemoteDevice

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多