2016-04-28 37 views
2

我想知道的:android系統如何自動連接到配對設備?

我想知道如何在Android系統(如Android智能手機)自動連接到其前配對的設備。

例如,我配對我的藍牙耳機與我的Android智能手機中的"turn on scanning/advertising -> click pairing"程序第1天當我打開我的耳機廣告,它的第2天,3,4自動連接,所以上。問題是,我不必再次掃描我的智能手機以查找我的(配對)耳機。

我無法理解android系統如何發現配對設備已打開。 android系統是否定期在後臺掃描?即使我不點擊「掃描」按鈕?

爲什麼我問:

我想讓我的應用程序自動連接到定製的BLE裝置,使配對後。我成功地使用createBond()方法進行配對(綁定),但之後,我無法找到如何進行自動連接。我知道我可以像這樣打開自動連接功能,connectGatt(XXX, true, XXX),但是這個自動連接功能在幾天內斷開BLE設備時不起作用。

所以我想讓我的應用程序像android系統和藍牙耳機一樣工作。但我無法找到安卓藍牙系統如何工作,即使我挖掘AOSP代碼。

我發現了許多關於像我這樣的問題的問題(herehere),但沒有答案。

在此先感謝。

更新:

我發現bt_btif被激活(與LG的智能手機和Nexus 5)當配對耳機已開啓(上投放廣告)。但bt_btif未使用我的自定義BLE設備激活...我該怎麼辦?

+0

將耳機看作是一個例子:掃描對於傳統藍牙與BLE完全不同。 –

回答

0

我做了一個類似的應用程序,我沒有問題。作爲您的問題的最後一招,我會建議將BLE設備地址寫入簡單的數據庫表並手動連接到它。我做了這樣的事情here 。這不是最佳實踐代碼,但我希望你能找到適合你的解決方案。

+0

我想做的是自動重新連接到BLE設備,無需用戶輸入。我認爲你的應用通過點擊設備連接到設備。如果我的理解錯誤,請告訴我。 – beneficial02

+0

更正初始化,但您可以在其他事件上做類似的事情,例如,當應用程序啓動或發現新設備時,檢查其地址是否已存在於數據庫中。 –

+0

我發現了一個基於靈感來自你的代碼的想法的解決方案。謝謝! – beneficial02

1

我想我找到了解決方案。

首先,我的問題的解決方案:Android智能手機似乎檢測到硬件方面附近藍牙設備的狀態變化。當配對的藍牙耳機開始做廣告時,會調用HAL中的回調(我認爲)。

所以我做了我的應用程序connectGattautoConnection=True到我想要的設備,使用MAC地址,當活動(在MainActivityonResume())開始。

如果我的BLE外圍設備沒有廣告,連接將會失敗。但設備在開始廣告時會自動連接,因爲autoConnection參數設置爲true。

2

執行connectGatt(XXX, true, XXX)是正確的方法。 gatt.connect()也開始自動連接。一旦你執行了,你的手機將掃描設備,一旦它出現,它連接到它。如果手機上的藍牙關閉或者您的應用程序進程被終止,唯一中斷此通話的事件是。爲了避免你的程序被殺,讓你的應用程序有一個前臺服務。

然而,有一個錯誤在Android中,它有時會使自動連接做一個直接連接,而不是(大約30秒後取消)。見https://code.google.com/p/android/issues/detail?id=69834。你需要使用反射來避免這個錯誤。

+0

感謝您對autoconnect bug的評論!,它讓我失望了一條我從未調查過的調試路線。這個答案中有一個完整的java解決方法:http://stackoverflow.com/a/39269766/5414907 –

相關問題