获取由给定Android应用程序处理的可用URL方案

时间:2016-07-05 19:01:12

标签: android android-manifest url-scheme

我有一套应用程序,每个应用程序都定义了不同的url方案。我有一个帮助应用程序,可以使用各种配置启动我的各种应用程序。现在我正在尝试测试最近添加的网址方案功能。因此,鉴于本地设备上的已知应用程序(例如,我有包名称,我有List [ResolveInfo],我有PackageInfo等...)我是否可以提取它支持的url方案?

以Facebook为例,如果我有包名“com.facebook.katana”,我可以从Android操作系统获取,该应用程序支持url方案“fb://”吗?

作为旁注,是的,我可以在我已知的包名和url方案之间创建一个本地映射,但我想看看是否有可能采用编程方法。

使用定义的网址方案添加我的某个应用活动的定义:

<activity
    android:name="com.mycompany.activity.HandleURIActivity"
    android:exported="true">
    <!-- URL Scheme -->
    <intent-filter>
        <data android:scheme="@string/app_url_scheme" />
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

的strings.xml

<string name="app_url_scheme">ac-dc</string>

1 个答案:

答案 0 :(得分:0)

我认为这应该可以解决问题(未经测试):

PackageManager pm = context.getPackageManager();
Intent i = new Intent();
i.setPackage(MY_PACKAGE);
List<ResolveInfo> list = pm.queryIntentActivities(i, PackageManager.MATCH_ALL);
for (ResolveInfo info : list) {
    Iterator<String> it = info.filter.schemesIterator();
    // iterate it to get the list of schemes.
}