Android 4.3 LE蓝牙客户端服务器冲突



我正在使用Samsung Galaxy S4运行Android 4.3我正在尝试使用Android 4.2.2在三星的LEB API上运行的应用程序。我可以发现并连接(connectGatt)到外围设备并成功运行所有"客户端"代码,前提是我不尝试将其连接为服务器。

每当我连接

mBluetoothGattServer = mBluetoothManager.openGattServer(this, mGattServerCallbacks);

logcat表示与Bluetoothgatt停止的通信。

发现所有GATT服务后,我都尝试使用openGattServer。我尝试在GattServerCallback onConnectionStateChange中使用addServices。该代码运行,但我没有得到OnServiceAdd的回调

我应用程序中的" Gatt Client"one_answers" Gatt Server"代码都无法运行。

我确实获得了两者的onConnectionStateChange回调。

如何,何时何地(MainActivityBLEService)我实例化mBluetoothGattServer

这是在某个地方记录的吗?使用一些示例代码?

我问题的第一部分是暂时解决的。我启动了一个新线程,添加了一个延迟,然后称为OpenGattServer。我的"客户端"代码现在正常工作。(我对此不满意 - 这是由于挫败感而产生的尝试 - 如果我可以使用服务器代码工作,我可能会尝试使用队列)。

我确实获得了onConnectionStateChange的CC_11。

但是,我似乎还没有运行任何"服务器"代码。

我找到了一个临时解决方案。当我实例化mbluetoothgattserver对象时,调用了" onConnectionStateChange",而mbluetoothgattserver = null(still)。这是一个惊喜,因为实例化对象会导致回调注册。我将OnConnectionStateChange的代码延迟,直到mbluetoothgattserver!= null(尝试次数适当),并能够成功添加服务。在撰写本文时,看来我必须一次添加一个服务,然后等待onserviceadded回调,然后再添加每个服务(尚未测试)

我必须说三星BLE SDK更容易理解和管理。

您应该在任何BluetoothDevice上调用connectGatt之前初始化BluetoothGattServer

mBluetoothGattServer = mBluetoothManager.openGattServer(self, mGattServerCallbacks);
mBluetoothGatt = device.connectGatt(this, false, mGattCallbacks);

事实是您只需要一个BluetoothGattServer实例,并且mGattServerCallbacks中的回调将与mGattCallbacks中的那些一起称为。

连接设备时,将在两个回调包装器中调用称为onConnectionStateChange的方法。

相关内容

  • 没有找到相关文章

最新更新