這真的有必要嗎? (沒有它似乎沒問題)。
不,這不是必要一個完全獨立的應用程序,但可能會被認爲是很好的做法反正。
在公共可用的應用程序中,更重要的是它們可以進行交互,但保持某種方式來唯一標識自己以及它們正在交換的數據。至於使用哪個包名取決於上下文。
舉個抽象的例子...
A公司生產的一個應用程序,可以提供某種數據處理的哪些應用由公司B和公司C製作可以使用。意圖的「行動」將被命名爲與公司A相關,但兩個「客戶」應用程序傳遞給它的數據將被命名爲與客戶應用程序公司相關。例如...
APPA的文檔......
To request data processing use:
com.companyA.intent.action.PROCESS_DATA
Pass data with the above intent as an extra named:
<your package name>.SOME_DATA
現在,當APPA的相關組件被稱爲與上述情況,它會檢查是否有是一個「額外」與同.SOME_DATA結尾的名稱但由於唯一的前綴,它還能夠將數據與其他應用程序提供的其他數據分開保存。所以......
B公司代碼
Intent i = new Intent(com.companyA.intent.action.PROCESS_DATA);
i.putExtra(com.companyB.SomeApp.SOME_DATA, data);
C公司代碼
Intent i = new Intent(com.companyA.intent.action.PROCESS_DATA);
i.putExtra(com.companyC.SomeOtherApp.SOME_DATA, data);
OK,我更好的例子可能不是一個,但它歸結爲是很重要的,看看如何Android環境非常關注不同的應用程序組件能夠相互使用,傳遞數據以及該數據的來源是唯一可識別的。
謝謝你,將其清除了很多。有一點我沒有在你的例子中得到。 - 是否假設「com.companyB.SomeApp.SOME_DATA」是任何特定類型(例如String)?我會認爲這是一個字符串,公司A的代碼必須在修改之前的所有內容,包括最後一個「點」?如果是這樣,這必須由公司A,B和C(顯然)「理解」。 – steve 2011-02-23 00:39:57
@steve:putExtra使用表單(字符串名稱,值爲),其中'name'必須在兩側都可以理解 - 'value'可以是不同的類型(int,string等)。我的例子是基於應用程序如何直接而不是在廣播中進行通信(例如「我在這裏有一個圖像文件,誰知道如何打開它?」一種Intent)。在你自己的應用程序組件之間傳遞數據仍然意味着他們需要知道'額外'意味着什麼,但是開發人員總是有潛力創建其他開發人員可以基於已發佈文檔使用的應用程序 –
Squonk
2011-02-23 06:47:35
感謝@MisterSquonk,我明白。我認爲這種事情的一個很好的模式就是總是通過一個完全合格的'名字'在'額外'中傳遞一個包。然後,捆綁包中的各個值可能會有短名稱,因爲可以明確調用者是基於捆綁包名稱的。這將更容易解析並在代碼中讀取。當然,你可以限定每一塊數據,但這似乎有點像矯枉過正......再次感謝(也感謝其他評論者) – steve 2011-02-23 16:26:52