2010-02-15 80 views
4

如果我想創建自定義通訊簿(它會覆蓋手機的默認通訊簿),並且如果我希望所有應用程序都可以使用它,那麼應該如何處理我的intent-filter?考慮到這樣的第三方應用程序可能具有惡意性,Android允許我做這樣的事情嗎?!在Android中的意圖分辨率

而且,如果我想要另一個地址簿應用程序,我想第二個應用程序也有相同的intent-filter,不是嗎?如果在撥打電話時點擊聯繫人按鈕,框架如何決定選擇哪個應用程序?換句話說,如果框架在多個intent-filters之間存在衝突的情況下如何解決意圖?

回答

3

您可以替換Android平臺上的任何應用程序,甚至是家庭。 Android文檔解釋了所有關於Intents and Intent Filters的知識,並且有一個部分叫做Intent Resolution,它可以解答您的問題。 Intent類的意圖解析部分有一些附加信息。

據我可以告訴Android不會嘗試解決衝突。它要求用戶運行哪個應用程序,並讓他們選擇將此Activity標記爲此Intent的默認值。他們舉了一個關於郵件應用here的例子。

+0

嗨尼古拉, 感謝您的回覆。我已閱讀有關Android開發人員門戶的文檔。然而,我的問題的答案仍然沒有... 從我的理解,如果一個活動/應用程序通告它支持某些意圖使用適當的意圖過濾器,然後框架可以很容易地路由到該活動的意圖。然而,我的問題是:如果有兩個應用程序完全相同的意圖過濾器,框架如何挑選一個?不要通過擲骰子來說。 :) Saksham – Saksham 2010-02-17 11:43:01

+1

尼古拉是正確的。 Android要求用戶決定使用哪個應用程序。例如,如果有地址鏈接,我會在我的Evo上看到一個對話框,以便在Google地圖和Sprint導航之間進行選擇。 – 2011-03-05 07:46:59

0

雖然Smiljanić先生基本上是正確的,但Android中沒有聯繫人應用程序供您替換。 Dialtacts是支持聯繫人,通話記錄和撥號程序的應用程序。該應用程序不能被替換,主要是因爲撥號程序不能被替換。

所以,雖然你可以覆蓋一些意向性的過濾器和一些聯繫人相關的請求得到了控制,你將無法獲得覆蓋Dialtacts的接觸部分,這會混淆用戶。

+0

HTC用Sense UI製作了他們的自定義地址簿,並且我在線閱讀的內容之一(我可能會誤解)是,您可以使用適當的意圖/意圖過濾器自定義Android上的所有內容。問題是,我可以覆蓋通訊簿,例如HTC的英雄嗎?如果我可以,那麼如果我有地址簿應用程序A和B,該怎麼辦?框架選擇哪一個? 非常感謝 – Saksham 2010-02-17 11:48:08

+0

「您可以使用適當的意圖/意圖過濾器在Android上自定義幾乎所有內容」 - 總體而言,是的。然而,「幾乎所有的東西」!=「一切」。您無法替換英雄上的撥號。 – CommonsWare 2010-02-17 12:55:40