2017-04-18 46 views
0

我正在開發一款android BLE應用,嘗試在應用和BLE設備之間建立穩定的連接。Android保存BLE設備以在應用關閉後重新連接

爲了實現這一點,我希望我的應用能夠將BLE設備數據保存在共享首選項或某處。

應用程序關閉後,我希望我的應用程序檢索此數據並嘗試連接而不掃描設備。

我寧願避免每次掃描becouse掃描給我很多問題,它需要時間。

怎麼辦?有沒有辦法保存BLE數據?

回答

2

您需要將設備的藍牙設備地址(AB:CD:EF:01:02:03)存儲在例如共享首選項或sqlite數據庫中。稍後重新啓動應用程序以檢索BluetoothDevice對象時,請使用https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#getRemoteDevice(java.lang.String)。一旦你有了BluetoothDevice對象,你可以照常使用connectGatt方法。

然而,有些未記錄的事情需要記住。由於Android的BLE API中存在一些可怕的設計缺陷,因此無法告訴它您的意思是給定的地址是公共地址還是隨機地址。 (您可以在https://devzone.nordicsemi.com/question/43670/how-to-distinguish-between-random-and-public-gap-addresses/閱讀更多關於不同地址類型的信息)。 getRemoteDevice方法應該接受一個額外的參數「隨機地址/公共地址」,但它沒有。如果沒有正確的地址類型,藍牙控制器無法連接到設備。

如果地址是公開的或隨機的,Android的BLE堆棧會有一些內部啓發式的「猜測」,但不幸的是,Android版本和使用autoConnect = true或false的情況不同。但是,如果您綁定了設備(https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#createBond()),那麼它將在其內部DB中存儲給定的地址是公共還是隨機的。如果你想連接的外設使用一個隨機可解析的地址,它也可以處理,如果你使用綁定。所以我強烈建議使用粘合。

如果您不使用綁定,則需要在連接到設備之前進行掃描,因爲當您開始掃描並檢測到設備時,Android的BLE堆棧將暫時(直到下一次重新啓動藍牙)記住地址鍵入地址。

+0

你已經啓發了我的感謝,BLE真的很難理解。 –

相關問題