2015-09-09 343 views
0

我正在製作一個應用程序,該應用程序必須與Android上的BLE設備交談。Android BLE,無法連接到設備

我遇到了建立與BLE設備連接的問題。

案例1)掃描: 在掃描過程中的設備已經被發現,並通過

BluetoothLEScanCallback.onScanResult(...) 

報道,我試圖通過連接後:

result.getDevice().connectGatt(...) 

問題是一些設備我測試了這個(即運行Android 5.0.1的HTC One M8和運行Android 4.3的HTC Desire 516)連接過程似乎失敗了,即回調

BluetoothGattCallback.onConnectionStateChange(....) 

大部分時間根本不叫。 現在這不是一個一致的行爲,有時它不是。

的第二個問題是,往往當連接建立 的

BluetoothGatt.discoverServices() 

調用失敗,即 BluetoothGattCallback.onServicesDiscovered(...) 也不會被調用。我嘗試重試呼叫幾次,間隔X毫秒,但它似乎始終失敗,無論嘗試的次數或它們之間的間隔。

案例2聽力

當我嘗試只是「聽」的設備,再次調用

BluetoothDevice device = BluetoothManager.getAdapter().getRemoteDevice(macAddress); 
device.connectGatt(...) 

結果往往在相同的情況下幾乎同樣的事情發生。

在這兩種情況下,我大多數時候都遇到了Android問題,我有一個Nexus 5設備,其中相同的代碼似乎在大多數情況下工作(有時BT堆棧似乎無法完成其工作) 更令人不安的是,我們擁有的iOS應用程序沒有這些問題。

有沒有人遇到這些問題? 任何想法如何解決他們?

+0

你在測試BluetoothGatt.discoverServices()的布爾結果嗎? –

+0

是的,我正在檢查它,並且我有一個重試策略,以防BTLE「忙」並且不希望接受呼叫。 –

回答

1

編輯: 我們做了「解決」這一個。以防萬一有人在這種情況下絆倒,在我的情況下的問題是,從設備到設備甚至從連接到連接ymmv很多。 有時這個過程發生在第二次或其他時間需要5次,在我的測試中,它可以爬到我測試的設備上的15次。至於爲什麼這是我不能告訴。

+0

當你說你「解決」它時,你是否意味着你等待的時間更長,並最終連接?我看到的應用程序擁有數百個用戶,但在HTC M8上無法正常工作,我等待了30秒,仍然沒有任何結果。 –

+0

不是。這是很久以前的事情,但邏輯最終並不像簡單的等待那樣簡單。我使用的一種解決方法(在Google Bug跟蹤器中看到它)是在連接建立和呼叫「發現服務」之間增加了一個延遲,基本上,我沒有延遲(大約一秒)嘗試的任何呼叫打破了連接。如果您有探索設備狀態的工具,這將非常有幫助。如果我發現這種情況,我最終還是會「強制」重試,基本上等幾秒鐘後重新初始化並重試。 –

+0

同樣將命令分隔開來,將它們背靠背發送證明是有問題的。並時刻關注順序。 –

-1

我遇到同樣的問題。我連接到Bluegigga BLE113藍牙4.0模塊。我的應用程序基於BluetoothLeGatt示例源。我的三星手機連接很好,沒有問題。我的LG V10無法連接。除了有時,它會連接。大多數情況下,它不會連接。 onConnectionStateChange永遠不會被調用。這是非常令人沮喪的,我一直無法弄清楚這個問題。

但我可以連接我的LG手機,如果我使用NRF連接,這似乎證明有一個編程解決方案。但他們不會釋放NRF-Connect的來源。

如果有人可以擴展如何解決這個問題,我將不勝感激。