2014-10-01 63 views
2

我有一個項目,涉及使用Android設備通過藍牙SPP向遠程嵌入式控制器(類似於Arduino)發送命令和接收消息。具有多種活動的Android藍牙服務

我已成功創建了一個基於YouTube上一系列tutorials的單個活動應用程序。本教程中的許多代碼取自官方的BluetoothChat示例,但它不是作爲服務完成的。

現在對於我的問題...我需要設置一個「主頁」活動,當點擊相應的按鈕時將啓動其他活動。

主頁上產生的每個活動都會有按鈕控件,通過藍牙將命令發送到嵌入式控制器以執行不同的功能。

初始藍牙連接在我的主頁活動中啓動。但是,當啓動新的活動時,我的主頁的onStop()方法被調用,並且藍牙連接丟失。

在每個活動中都沒有複製藍牙代碼的功能,這似乎是一種服務是要走的路?我在堆棧溢出link上找到了這篇文章,這非常好,但是我對Android編程已經足夠新了,因爲缺少的細節讓我碰到了一堵磚牆。

此外,該示例並未解決使用該服務的多個活動。使用藍牙連接進行多項活動的最佳方式是什麼?

回答

2

我看到兩個選項爲你實現你所追求的:

  • 管理於服務您的藍牙連接,並使用Android doc編寫工作服務。您可以使用bindService()將每個活動綁定到正在運行的服務。該服務在後臺運行,並且在您從一個活動轉到另一個活動時不會停止。但爲此,您需要將大部分代碼轉換爲服務。再次,請按照文檔。使用片段:Android Doc。如果你對碎片一無所知:Android doc。基本上,片段與活動非常相似,但Android推薦使用片段。您將有一項活動管理您的藍牙連接並承載您的碎片:您將用碎片替換您希望在應用中擁有的所有活動。所以當你從一個片段導航到另一個時,你的活動將不會停止,因此你的藍牙連接將是安全的。

我不知道正是你想做的事,但第一個選項是唯一正確的選擇,如果您的藍牙連接具有即使用戶擁有自己的手機在口袋裏運行。如果用戶在離開應用程序時不需要保持藍牙連接,則第二種選擇更好。

希望它很清楚。

+1

片段的想法是爲我走的路。我對碎片知之甚少,但花了大部分時間在學習,我的應用現在按我想要的方式工作。對於那些有類似情況的人,除了Android文檔,我還高度推薦了Youtube上的「Slidenerd」片段系列教程。 – john8791 2014-10-01 23:03:00

+0

據我所知,文檔服務在有界活動停止時停止。我對嗎? 因此,如果第二個活動在第一個活動之後開始(例如,按鈕點擊),那麼您如何將第二個活動綁定到該服務? (以便在第一個活動中建立的連接不會死亡) – Sndn 2015-03-11 11:11:26

+0

@Sndn您應該創建一個活動,就像所有其他活動一樣。你可以稱之爲AbstractActivity或者其他東西,並用它來擴展Activity,然後所有其他活動都應該執行該AbstractActivity。這就是它不會停止工作的原因。 - 編輯 - 我剛看到這個問題有多大。但是,答案可能有助於某人,誰知道。 :) – zed 2016-12-10 13:24:49

-1

你可能會想要從UI線程運行這個...獨立於堆棧上的活動生命週期。也考慮提供者。如果您正在處理與您的應用程序的通信/訪問或在其外部進行通信(尤其是跨活動和其他Android應用程序),提供商將非常有幫助。