我在一个应用程序中有一个带有以下intent过滤器的活动:
<intent-filter>
<data
android:scheme="http" android:host="test.co.uk"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
在单独的应用程序中,我使用前缀为http
的URI触发了一个intent:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://test.co.uk"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
当触发此意图时,会出现预期的Android行为 - 操作系统会询问我是否要打开Web浏览器或我自己的应用程序(因为它们都已注册接收http
数据)。 / p>
我的目标是以编程方式优先考虑其中一个应用程序 - 如果安装了我想使用我自己的应用程序,如果没有,则回退到在浏览器中打开链接。这是否可能,而不会导致操作系统询问用户他们想要使用哪个应用程序?
我有以下代码查询包管理器以查找可以处理我的意图的所有活动。见下文:
PackageManager pm = getPackageManager();
List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, 0);
我正在尝试为返回的每个活动使用ResolveInfo
对象(在这种情况下,有2个活动)。我试图从每个ResolveInfo
获取主机,以便我可以确定哪一个是专门监听test.co.uk
(所以我可以直接触发指向该应用程序包的意图)但我不能看到任何检索主机的方法。