2016-07-05 4 views
1

J'ai une suite d'applications qui définissent chacune des schémas d'URL différents. J'ai une application d'aide qui lance mes différentes applications avec diverses configurations. En ce moment j'essaye de tester la fonctionnalité de schéma d'URL récemment ajoutée. Donc, étant donné une application connue sur le périphérique local (par exemple j'ai le nom du paquet, j'ai la liste [ResolveInfo], j'ai le PackageInfo, etc ...) est-il possible pour moi d'extraire les schémas d'url qu'il supporte? Prenant facebook comme exemple, si j'ai le nom de paquet "com.facebook.katana" est-il possible pour moi d'obtenir de l'OS Android, que le schéma d'url "fb: //" est supporté par cette application ?Obtenir les schémas d'URL disponibles gérés par une application Android donnée

En note, oui, je peux créer un mappage local entre mes noms de paquets connus et mes schémas d'url, mais je voulais voir si une approche programmatique était possible.

Ajout de la définition d'un de mes activités d'application avec un schéma d'URL défini sur elle:

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

Répondre

0

Je pense que cela devrait faire l'affaire (non testé):

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

L'activité avec l'intention avec le schéma défini n'apparaît pas dans la liste de ResolveInfo. Mes autres activités avec d'autres types de filtres d'intention apparaissent. – FishStix

+0

ajouter android: exported = "true" sur cette activité, voir https://developer.android.com/guide/topics/manifest/activity-element.html#exported – marmor

+0

exported = "true" ne semble pas fonctionner. J'ai ajouté ma définition d'activité à partir du manifeste de l'application que j'essaie de voir à l'intérieur de – FishStix