2013-07-23 71 views
10

我不是藍牙專家,並且想知道在彼此範圍內自動找到已配對的藍牙設備有哪些可能性。當它們在範圍內時,自動查找已配對的藍牙設備

背景: 在我們的情況下一個Android應用程序需要通過藍牙(RFCOMM)連接到專用配件。這兩種設備是彼此都知道的(他們是成對的)。 Android應用程序註冊一個廣播接收器。在應用程序啓動過程中,應用程序啓動發現以查找專用附件。如果附件在範圍內,一切都很好。

問題: 用戶在專用附件範圍之外啓動應用程序。 Android應用程序嘗試發現附件沒有成功。然後用戶進入藍牙配件的範圍。廣播接收機將不會收到有關現在處於範圍內的配件的通知。

類似主題/可能的解決方案 類似的問題,已經有人在計算器(例如autoconnect to bluetooth device when in range)。 但不斷嘗試發現範圍內的藍牙設備不是我所期待的,因爲這會導致Android設備的電量消耗過多。

另一種解決方案是嘗試連接到Activity的onResume方法中的配對設備。這將工作,但具有應用程序無法在後臺運行的缺點。因此用戶必須至少將應用程序帶到前臺才能啓動連接。

我想到的第三個想法是在Android應用程序中實現一個服務器套接字。當Android應用程序啓動並且發現沒有成功時,Android應用程序可以創建服務器套接字並偵聽附件的傳入通知。這有助於在某些情況下(例如,用戶啓動其應用程序,接近附件,激活附件,並且附件在啓動時通知應用程序它現在處於範圍內)。但是這仍然不是100%的解決方案,因爲兩個設備都可以在對方範圍之外開始。此外,它將強制實施附加功能(Android設備中的藍牙服務器套接字...)。

所以我想知道是否存在更好的解決方案。我要尋找其中不要求額外的ServerSockets一個解決方案,我總是得到兩個已經配對的設備在相互:-)範圍

任何幫助的感謝通知!

+0

我會根據您的第二個解決方案,在其中嘗試連接附件而不搜索相同的附件,以手機和耳機爲例,如果連接並且1不在範圍內,通常耳機會嘗試連接到先前配對的設備一段特定的時間(取決於耳機的實施)。 – ashish

+0

嘿!感謝您的回覆。第二種解決方案的缺點是必須以某種方式觸發(例如onResume)。在onResume的情況下,用戶必須將應用程序放到前臺。我找了有可能在正確的時間自動執行它很容易讓用戶:-) – mheymel

+0

是沒可能有在後臺運行的服務將採取藍牙設備的連接護理/搜索 – ashish

回答

0

不是一個完整的解決方案,但是,只要屏幕打開,您的應用程序就可以輪詢配件的存在了嗎?在這種情況下,這可能會有所幫助:Start Activity on wake up/sleep in Android

+0

嘿。感謝您的回覆!這也是一個很好的解決方案(比「onResume」解決方案更好)。但你是對的,仍然不是100%的解決方案。看看ACL和低層消息後,它似乎是使用解決方案3的最佳方式 - 因爲我們擁有專用附件的舒適性。 [鏈接](http://stackoverflow.com/questions/9537833/what-triggers-the-bluetoothdevice-action-acl-broadcasts) – mheymel

相關問題