2012-09-15 69 views
2

假設用戶安裝了spotify,youtube,xbmc和glympse應用程序。如何獲得每個響應任何URL/URI-Intent的App/Activity?

spotify-app響應「spotify:album:123」-intents和glympse-app至「glympse.com/123"-intents。 XBMC-app和YouTube-app都會響應「youtube.com/watch?v=123"-intents」。

我想得到的是響應這種意圖的每個應用程序。我不想給出特定URL/URI的意圖,而是想讓每個響應某種URL/URI意圖的應用程序。

如果仍然不夠清楚,下面是一些非工作代碼,它顯示了我想要的(除了它只查詢URI)。

getPackageManager()->queryIntentActivities(new Intent(Intent.Action_VIEW, Uri.parse("http://*")), 0) 
+0

我不認爲你很清楚你的跟進編輯了。因此,您希望列表中顯示的每個應用程序在您點擊時顯示。你應該比只強調幾句話更詳細 – nandeesh

+0

根據我得到的批評我編輯了我的問題。我希望現在很清楚,因爲我的問題到目前爲止還沒有回答:( –

回答

4

我想得到的是每一個響應這種意圖的應用程序。我不想給出特定URL/URI的意圖,而是想讓每個響應某種URL/URI意圖的應用程序。

這不是通過Android SDK直接可能的。 Android可以告訴您可以響應特定Intent的活動,但您無法搜索已註冊的<intent-filter>對象以查找所有具有<data>元素和android:scheme屬性的對象。

+0

Dang,謝謝你的回答。是解決方法時間:/ –

3

您可以通過創建一個虛擬的意圖(即有你所研究的同一格式),然後使用普通PackageManage路線查詢哪些應用程序可以處理它做到這一點:

Intent dummy = new Intent(Intent.ACTION_VIEW); 
dummy.setData(Uri.parse("http://www.youtube.com/watch?v=QH2-TGUlwu4"); 

PackageManager packageManager = context.getPackageManager(); 
List<ResolveInfo> list = packageManager.queryIntentActivities(dummy, 0); 

// "list" now contains all apps that can handle a YT link 
+1

好的,我應該已經更清楚了,我希望每個應用都能響應任何url-意圖 –

+0

你可以使用'http :// www.google.com'或任何其他虛擬網址... – ChristopheCVB

+0

問題是,只有瀏覽器纔會迴應這樣的網址。例如,YouTube只會迴應youtube.com/watch?v=123網址.. –