我有一個應用程序,我需要與另一部手機建立和維護藍牙連接。但是,即使屏幕關閉,此連接仍需保持活動狀態。Android服務 - 調用方法和傳遞對象,無需綁定
所以我這樣做的方式是1)使它成爲一個服務,以便連接可以存在於後臺2)明確調用啓動/停止服務而不是綁定到活動(我相信如果屏幕熄滅,活動將消失,因此服務將停止)因此,我的服務具有需要手動調用的方法,這使事情變得更加複雜。例如,我想在用戶單擊按鈕時開始發現藍牙。所以在點擊按鈕時,我需要告訴該服務調用我的startDiscovery
方法。有很多這樣的情況(例如打開套接字,配對到設備等),我需要手動調用服務方法
我讀過的這個主題很多都是通過綁定服務來解決這個問題,但是這個我不能這樣做,如前所述
沒有綁定,其他人建議使用某種事件總線,在按鈕點擊我發送消息到服務。當它收到消息時,它會檢查它是什麼類型的消息,然後調用適當的方法。
好的,這是有效的,但如果我的方法需要我傳遞某些信息會怎樣?例如,可以說我有一個列表或我需要通過藍牙發送的內容。所以我在我的Service中有一個方法,它接受一個列表對象,將它序列化並通過BT將它發送到另一個電話。但是,對於基本的消息傳遞/事件總線系統來說,這似乎不可行
總而言之,如何將對象傳遞給未綁定到活動的服務中的方法,而是通過手動方式啓動startService
?
我看到這個問題here,但是這種方法似乎只允許我在啓動服務時發送對象。在我的情況下,該服務已經開始,並在後臺處理藍牙流量。我需要能夠在服務已經運行時調用方法並傳遞對象
是的,我已經試過讓我所有的方法靜態的,但它似乎會帶來一些問題與藍牙連接。我不確定這是否是由於我的實施,但我希望避免使用靜態方法 – Simon
@Simon請參閱更新的答案 – TychoTheTaco