首页 > 解决方案 > openGattServer(context, mGattServerCallback) 似乎没有打开 gattserver,为什么?

问题描述

我正在尝试在我的应用程序中创建一个 gattserver,因此它可以充当外围设备。首先,我注意到我为中央(客户端)编写的代码无法连接到服务器(BluetoothGattCallback 方法 onConnectionStateChange 提供了臭名昭著的状态 113)。然后我尝试通过 Playstore 应用程序nrf connect进行连接,这也是不可能的。广告(也在我的代码中完成)虽然有效。客户端代码以及 nrf 连接扫描并检测我的广告。这就是我想要启动服务器的方式:

BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mGattServer = mBluetoothManager.openGattServer(this, mGattServerCallback);

我之前定义了 gattservercallback,所以该行被执行,我得到一个不为 NULL 的 BluetoothGattServer 实例,正如我想要的那样,我什至可以毫无问题地添加一个服务:

btGattServer.addService(createService());

(createService 返回一个服务实例)

我真的很感激这方面的帮助!如果有人需要更多详细信息或更多代码(例如开始广告的代码),我很乐意更新我的问题!

标签: javaandroidbluetoothbluetooth-lowenergybluetooth-gatt

解决方案


我自己想通了:

要开始广告,您需要在 Advertiser 实例上调用 startAdvertising。此调用需要三个参数,其中一个是 AdvertiseSettings 对象。当我使用 AdvertiseSettings 构建器创建此对象时,我没有包含.setConnectable(true).

这就是为什么广告本身有效,但尝试连接的应用程序却无效的原因。(所以.openGattServer实际上打开了一个服务器,它只是无法连接)


推荐阅读