2016-07-05 51 views
1

我有一套應用程序,每個應用程序定義不同的url方案。我有一個幫手應用程序,可以啓動各種配置的各種應用程序。現在我試圖測試出最近添加的url方案功能。因此,鑑於本地設備上已知的應用程序(例如,我有軟件包名稱,我有List [ResolveInfo],我有PackageInfo等等)是否可以提取它支持的url方案?獲取由給定的Android應用程序處理的可用URL方案

以facebook爲例,如果我的軟件包名稱爲「com.facebook.katana」,那麼我可以從Android操作系統獲得該應用程序支持的url方案「fb://」 ?

作爲一個方面說明,是的,我可以創建一個我已知的軟件包名稱和url方案之間的本地映射,但我想看看是否可以使用編程方法。

添加我的應用程序的活動之一的定義與它定義的URL方案:

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

回答

0

我想這應該做的伎倆(未測試)

<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:

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. 
} 
+0

意向與定義的方案意圖的活動不會出現在ResolveInfo列表中。我的其他活動與其他類型的意圖過濾器出現。 – FishStix

+0

在該活動中添加android:exported =「true」,請參閱https://developer.android.com/guide/topics/manifest/activity-element.html#exported – marmor

+0

exported =「true」似乎不起作用。我從應用程序的清單中添加了我的活動定義,我試圖在裏面看到 – FishStix

相關問題