2

假设用户安装了 spotify、youtube、xbmc 和 glympse 应用程序。

spotify-app 响应“spotify:album:123”-intents,glympse-app 响应“glympse.com/123”-intents。XBMC 应用程序和 YouTube 应用程序都响应“youtube.com/watch?v=123”-intents。

我想要得到的是每个响应这种意图的应用程序。我不想给出特定 URL/URI 的意图,而是希望让每个应用程序都响应某种 URL/URI 意图。

如果这还不够清楚,这里有一些非工作代码,它显示了我想要的内容(除了它只查询 URI)。

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

2 回答 2

4

我想要得到的是每个响应这种意图的应用程序。我不想给出特定 URL/URI 的意图,而是希望让每个应用程序都响应某种 URL/URI 意图。

这不能通过 Android SDK 直接实现。Android 可以告诉您可以响应特定 Intent的活动,但您无法搜索已注册<intent-filter>的对象以找到所有具有<data>元素和android:scheme属性的活动。

于 2012-09-24T11:39:53.667 回答
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
于 2012-09-15T13:30:13.840 回答