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

时间:2014-01-20 23:28:14

标签: android bluetooth-lowenergy android-4.3-jelly-bean

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

每当我连接

mBluetoothGattServer = mBluetoothManager.openGattServer(this, mGattServerCallbacks);

LogCat表示与BluetoothGatt的通信停止。

在发现所有Gatt服务后,我尝试openGattServer。我在addServices GattServerCallback中尝试onConnectionStateChange。代码运行但我没有得到onServiceAdded回调

我的应用中的“gatt客户端”和“gatt服务器”代码都无法运行。

我确实得到了onConnectionStateChange个回调。

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

这是在某处记录的吗?有一些示例代码吗?

我的问题的第一部分暂时解决了。我开始了一个新线程,添加了一秒延迟,然后调用openGattServer。我的“客户端”代码现在运行正常。 (我对此感到不满意 - 这是一次因挫折而产生的尝试 - 如果我能让服务器代码工作,我可能会尝试使用队列。)

我为GattServerCallback获得onConnectionStateChange

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

2 个答案:

答案 0 :(得分:1)

我找到了一个临时解决方案。 当我实例化mBluetoothGattServer对象时,调用了回调“onConnectionStateChange”,而mBluetoothGattServer = null(仍然)。这是一个惊喜,因为实例化对象导致回调被注册。我对onConnectionStateChange的代码进行了延迟,直到mBluetoothGattServer!= null(对尝试次数有适当的限制)并且能够成功添加服务。在撰写本文时,似乎我将不得不一次添加一个服务并在添加每个服务之前等待onServiceAdded回调(这尚未测试)

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

答案 1 :(得分:0)

您应该在BluetoothGattServer上致电connectGatt之前初始化BluetoothDevice

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

事实上,您只需要一个BluetoothGattServer个实例,mGattServerCallbacks中的回调将与mGattCallbacks中的回调同时调用。

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