2014-02-12 40 views
1

有沒有簡單的方法來確定一個Intent是顯式的還是隱式的?如何檢查意圖是明示還是隱含?

我試圖在the Android docs中推薦使用推薦行爲的導航抽屜,即應用程序啓動時抽屜應該自動打開,直到用戶手動打開抽屜。

但是,使用導航抽屜的活動可以從我的應用程序中的多個位置開始,也可以從其他位置開始。我只想在我的應用程序外部啓動活動時纔打開抽屜,但我無法找到一個簡單的方法來查明意圖來自哪裏。


有在Intent幾種方法最初看起來前途無量:(!這裏你已經知道)

  • getComponent()似乎讓你在發送端的相關信息(NULL/NOT NULL)但根據文檔在接收端從不爲空。
  • hasCategory()可用於查找已知類別的外部意圖,如android.intent.category.LAUNCHER。這可能是我最終使用的,但我寧願有一個通用的解決方案,而不是在這裏解釋每種可能性。
  • getPackage()看起來可能會做正確的事情,但除非我沒有正確使用它,否則它似乎總是在我的測試中返回null。

另外,我總是可以使用putExtra()一個標誌添加到我的所有內部的意圖,但那種感覺太像一個黑客,所以我寧願避免它,如果有另一種選擇。

回答

2

有沒有一種簡單的方法來確定一個意圖是明示的還是隱含的?

鑑於您的其他問題,這不是您所需要的。你真正應該問的是:

我怎樣才能確定內部Intent從外部的調用,有限的麻煩?

在這種情況下,許多應用程序,你可以用這個算法:如果getAction()null,它是一個內部明確Intent。否則,假設它是外部的。

如果由於各種原因,您正在使用動作字符串來啓動本地活動(儘管還在Intent上設置了組件並使其明確),那麼您將需要回退到「附加」 。通常,如果您使用明確的Intent開始本地活動,則不會設置操作字符串,這會使操作字符串成爲隱式(操作不是null)和顯式(操作null)之間的明確界線。

0

實現這一目標的最佳方式是使用Intent來傳遞額外信息,以便像您提到的那樣標識調用它的Activity。當你認爲當活動完成並且調用活動檢查結果代碼時,經常檢查靜態標識符的意圖時,這不是特別的詭計。你的情況是檢查調用Activity的反例。

相關問題