当前位置: 首页 > 知识库问答 >
问题:

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

颜新
2023-03-14

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

>

设备2用作外围设备和客户端。

这是我想要实现的行为:

1) 设备2启动广告(外围角色)。

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

3) 我现在希望通知广告设备(设备2),它已被扫描,并且能够获取与设备1关联的BluetoothDevice。

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

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

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

我可能能够使用设备1中定义的BluetoothGattServer,并调用:gattServer。连接(BluetoothDevice device,boolean autoConnect),设备为设备2。

但是,如何通知设备2其已连接?

如果我不能在BluetoothDevice上调用ConnectGatt(上下文、布尔值、BluetoothGattCallback),我将如何在设备2中获取BluetoothGatt的实例?

提前感谢您的帮助!

一些文档:

BluetoothGattServer

蓝牙设备

共有2个答案

潘琪
2023-03-14

你必须把它转过来一点。扫描仪是连接到广告商的扫描仪。Dev1扫描dev2 adv并扫描响应。然后dev1应该连接。Dev2将在连接时得到回调。当有人在android上听到您的adv或请求扫描响应时没有回调。如果您想宣传具有特定服务的服务器连接到您的请求,请检查btsig的0x14“16位服务请求UUID列表”。看到这个使用有点不寻常。

齐学文
2023-03-14

1) 设备2启动广告(外围角色)。

外围角色将发布广告,请确保添加CONNECTABLE

     AdvertiseSettings.Builder settingBuilder = new AdvertiseSettings.Builder();
     settingBuilder.setConnectable(true);

并据此开始广告。

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

很好,现在在此设备(外围设备)上调用connectGatt,确保在获得所需设备后停止播发,否则最终会发送多个connect命令。

3) 我现在希望通知广告设备(设备2),它已被扫描,并且能够获取与设备1关联的BluetoothDevice。

当您从Central/Client角色调用ConnectGatt时,您的外设将在其BluetoothGattServerCallback'onConnectionStateChange中收到通知。

在那里你会知道连接已经建立。虽然你们必须在关贸总协定服务注册的特点在外围。

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

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

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

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

 类似资料:
  • 问题内容: 我想用BLE扫描某些设备。我只想显示我的设备,所以我知道了设备的名称,如果是好的设备,我会将其放在列表中。 我的问题是,如果我更改设备的名称,此检查将为false。因此,我看是否有可能获得一些我添加的用于执行检查的服务的不变的东西。唯一的方法是使用gatt在发现服务后执行此操作,然后再连接到该设备,但是,是否有可能在不连接设备的情况下从该设备发现某些服务? 问题答案: 我不具备andr

  • 我在为我的BLE设备开发Android软件时遇到了麻烦。我的软件可以找到我的设备和GATT服务,但在我的服务中找不到任何特征。 我查看了android-sdk-4.4.2源代码,发现了一些代码。https://android.googlesource.com/platform/external/bluetooth/bluedroid//android-sdk-4.4.2\u r1https://a

  • 如果有人能解释我在更新连接参数时遇到的一个问题,我将非常感谢Raspberry PI3 model B在与外围设备的BLE连接上充当中心设备,特别是在连接事件长度方面。 有人能给我解释一下这个问题吗? 谢谢

  • 例如,我有两个心率监视器与我的平板电脑配对。我正在使用这样的代码来获取HRM设备列表: 然后,我在GUI中显示一个列表框,其中包含从设备[I]获取的设备名称。名称例如,我选择索引为0的设备。然后我可以访问it人力资源服务和人力资源管理特征: 除了心率,我还需要电池状态。如何访问同一(已选择)设备的电池服务?

  • 问题内容: 通过蓝牙连接并接收数据。 我们正在为客户开发一个应用程序。这是一种通过蓝牙连接的婴儿玩具,我们在连接和传输数据时遇到了麻烦。 在完成所有研究之后,我们找到了两个替代方案: CoreBluetooth和BluetoothManager 。据我所知,CoreBluetooth仅与低功耗蓝牙(我认为这是最新的蓝牙版本)连接,因此无法找到客户的设备。使用第二个选项,BluetoothManag

  • 当建立蓝牙连接(BLE)时,外围设备是否有办法获得中央设备的名称?我不确定Bleno是否有必要的工具来得到这个。