要建立這種類型的互動,ContentProvider
將是你的朋友。根據您希望信息流向的方向,我可以考慮建立這種類型的系統有兩種選擇。
選項1:在主應用程序的ContentProvider單
在主應用程序,它創建用於其它應用到讀/寫數據到一個共同的位置的外部接口定義ContentProvider
。此提供程序可以訪問您的應用程序需要的場景數據文件/數據庫。
每個後續的插件應用程序都會訪問主ContentProvider(並且如果用戶運行插件但是尚未安裝主應用程序,還會警告用戶),並通過將其寫入ContentProvider
來安裝其特定內容。通過這種方式,每個插件都可以充當「安裝者」,這意味着用戶必須從Market下載並運行插件來安裝場景內容。
選項2:每個「插件」應用程序都有自己的ContentProvider
此選項是上述的相反。在每個插件應用程序中定義一個具有一致接口的ContentProvider
,並從主應用程序獲取一個方法,該方法可掃描系統以查找新插件(可通過PackageManager
完成),並將每個提供程序的數據讀取到其本地主存儲中。
這裏的區別在於用戶不必運行每個插件包,因爲主應用程序將負責獲取數據。但是,定義多個提供者的複雜性更高。例如,您必須確保即使每個提供程序具有相同的基本接口,也不能擁有一個共同的權限,因此您必須掃描系統以獲取自己的軟件包名稱,並根據該信息解析提供程序。
編輯
說了這麼多,我覺得我應該指出,我不相信這是向用戶提供內容的好方法。我對這個主題的個人感受是這種方法會污染用戶的設備,並且使用應用程序圖標來做它們不好,並且很難在移動設備上隱藏這種東西。更簡單,更簡潔的方法是將服務器上的「附加」內容存儲(像S3和SimpleDB這樣的AWS服務幾乎免費),並使用Google的應用內結算等服務讓用戶購買新的內容,並直接下載到單一的應用程序,而不是讓他們回到市場和購買更多的應用程序。
希望有助於!
如果您希望您的應用程序「可擴展」,您可以多寫幾段關於它的內容。 – CommonsWare
添加了更好的描述 – Nir