我正在使用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
回调。
如何,何时何地(MainActivity
或BLEService
)我实例化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
的方法。