簡體   English   中英

Android Auto-后台服務和Activity之間的通信

[英]Android Auto - Communication between background service and Activity

我正在嘗試將Android Auto的MediaBrowserService添加到現有的媒體播放器應用程序。 該應用程序具有管理MediaSessionCallbacks和相關狀態的單個活動。 它已設置為發出事件,后台MediaBrowserService消耗並使用事件來構建其內容樹。

當流程如下時,一切都很好:

Start my app -> Start Android Auto -> Browse media

但是,當流量為:

Start Android Auto -> Browse media

...例如,啟動Android Auto之前,該應用未啟動且未在后台運行。

問題似乎是,盡管我的MediaBrowserService將由Android Auto自動啟動,但這樣做時並不會創建我應用的Activity的對應實例(這意味着沒有事件可通知MediaBrowserService ,因此Android Auto中沒有可用的內容)。

理想情況下,似乎MediaBrowserService需要能夠檢查並查看應用程序的“主” Activity是否正在運行,並且如果沒有則生成一個新實例。 但是不確定這是否可行,並且似乎會覺得這是錯誤的方法。

解決此問題的正確方法是什么? 我不想在MediaBrowserService實現中復制應用程序的所有MediaSession處理和與回放相關的代碼。 那應該保持盡可能的輕巧。 有沒有一種方法可以確保只要MediaBrowserService處於活動狀態,該應用程序的Activity始終處於運行狀態?

答案是重構。 很多重構。

簡而言之,Android期望使用Activity來填補特定的架構利基 具體來說,就是您要通過設備屏幕向用戶顯示界面的利基市場。 其他用例(例如,在后台運行“無頭” Activity似乎既非預期,也不被支持。

因此,答案是將所有與應用程序有關的與回放相關的代碼從Activity ,將其移至后台Service ,並提供API來從/傳遞相關命令(以及接收數據,狀態更新等)到前台Activity (如果/當用戶與應用程序的用戶界面進行交互時)或從/到MediaBrowserService (如果//當用戶通過Android Auto的UI進行交互時)。 如果需要,可以從任一上下文輕松啟動服務。

這似乎是解決方案。 如果您正在使用一個不平凡的現有代碼庫,那肯定會很乏味。 更好地預見此類問題,並從一開始就相應地設計您的應用程序; 將與應用的用戶界面不直接相關的內容保留在Activity實施之外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM