2014-01-20 170 views
1

我正在使用運行Android 4.3的三星Galaxy S4 我想轉換在Android 4.2.2上運行在三星LEB API上的應用程序。 我可以發現並連接(connectGatt)到外設,併成功運行所有「客戶端」代碼,前提是我不嘗試作爲服務器連接。Android 4.3 LE藍牙客戶端服務器衝突

每當我連接

mBluetoothGattServer = mBluetoothManager.openGattServer(this, mGattServerCallbacks); 

的logcat中的表明,隨着BluetoothGatt停止通信。

在發現所有Gatt服務後,我試過openGattServer。我試圖addServicesGattServerCallbackonConnectionStateChange。代碼運行,但我沒有得到onServiceAdded回調

我的應用程序中的「gatt客戶端」和「gatt服務器」代碼都無法運行。

我確實得到了onConnectionStateChange這兩個回調。

如何,何時和何地(MainActivityBLEService)能否實例化mBluetoothGattServer

是否記錄在某處?用一些示例代碼?

我的問題的第一部分暫時解決。我開始了一個新線程,增加了一秒延遲,然後調用openGattServer。我的「客戶端」代碼現在可以正常工作。 (我對此並不滿意 - 這是一次嘗試,因挫折而產生 - 如果我能得到服務器代碼,我可以嘗試使用一個隊列)。

我確實得到GattServerCallbackonConnectionStateChange

但是,我似乎還沒有運行任何「服務器」代碼。

回答

1

我找到了一個臨時解決方案。 當我實例化mBluetoothGattServer對象時,調用回調「onConnectionStateChange」被調用,而mBluetoothGattServer = null(仍然)。這是一個驚喜,因爲實例化對象導致回調被註冊。我在onConnectionStateChange的代碼中加入了一個延遲,直到mBluetoothGattServer!= null(具有適當的嘗試次數限制)並且能夠成功添加服務。在撰寫本文時,似乎我將不得不一次添加一項服務,並在添加每項服務之前等待onServiceAdded回調(尚未測試)

我必須說三星BLE SDK更易於理解並管理。

+0

有沒有更新?我遇到了與Nexus 9一起開發的同樣的問題,已經過去了一年多 –

0

你應該在任何BluetoothDevice調用connectGatt之前初始化BluetoothGattServer

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

事實是,你只需要一個BluetoothGattServer實例,並在mGattServerCallbacks回調將同時與那些在mGattCallbacks被調用。

當您連接設備時,將在兩個回調包裝中調用名爲onConnectionStateChange的方法。

相關問題