[英]Android Auto - Communication between background service and Activity
我正在嘗試將Android Auto的MediaBrowserService
添加到現有的媒體播放器應用程序。 該應用程序具有管理MediaSession
, Callbacks
和相關狀態的單個活動。 它已設置為發出事件,后台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.