在呈现多个选项时优先启动特定应用程序

时间:2015-11-06 10:46:40

标签: android android-intent intentfilter

我在一个应用程序中有一个带有以下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(所以我可以直接触发指向该应用程序包的意图)但我不能看到任何检索主机的方法。

1 个答案:

答案 0 :(得分:0)

您可以检查您的应用是否安装在此Check if application is installed - Android,然后启动该应用的明确意图(如果已安装)。