我正在使用运行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
个回调。
我如何,何时何地(MainActivity
或BLEService
)实例化mBluetoothGattServer
?
这是在某处记录的吗?有一些示例代码吗?
我的问题的第一部分暂时解决了。我开始了一个新线程,添加了一秒延迟,然后调用openGattServer。我的“客户端”代码现在运行正常。 (我对此感到不满意 - 这是一次因挫折而产生的尝试 - 如果我能让服务器代码工作,我可能会尝试使用队列。)
我为GattServerCallback
获得onConnectionStateChange
。
但是,我似乎还没有运行任何“服务器”代码。
答案 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
的方法。