2012-09-05 5 views
2

J'ai enregistré un schéma d'URL pour mon application Android (disons myapp: // host).Détecter par programme si une application est installée sur Android

Sur mon autre application, je peux lancer cette application en utilisant Intent, mais comment puis-je vérifier si la première application est installée sans la lancer?

dans iOS, il est aussi facile que

[[UIApplication sharedApplication] canOpenUrl:@"myapp://"]; 

est-il un équivalent dans Android? (moyen facile)

Je voudrais vérifier en utilisant le schéma d'URL. Je sais comment vérifier en utilisant le nom du package, mais je ne sais pas comment obtenir le schéma d'URL de PackageInfo et ... (façon plus difficile)

PackageManager pm = m_cContext.getPackageManager(); 
    boolean installed = false; 
    try { 
     @SuppressWarnings("unused") 
     PackageInfo pInfo = pm.getPackageInfo(szPackageName, PackageManager.GET_ACTIVITIES); 
     installed = true; 
    } 
    catch (PackageManager.NameNotFoundException e) { 
     installed = false; 
    } 

Merci à l'avance!

Note: Ceci est la version Android de la même question pour iOS: Detecting programmatically whether an app is installed on iPhone

Répondre

2

Si vous savez comment lancer l'application, puis créez l'intention qui lance votre application, puis appelez queryIntentActivities

Intent intent = //your app launching intent goes here 
PackageManager packageManager = mContext.getPackageManager(); 
List<ResolveInfo> resolvedActivities = packageManager.queryIntentActivities(intent,0); 
if(resolvedActivities.size() >0) 
    \\present 
+3

Cela fonctionnera généralement, mais il peut y avoir plusieurs activités qui peuvent gérer l'URL, il est donc préférable de vérifier le nom du paquet ('ResolveInfo.activityInfo.packageName'). Il est encore compliqué par certains changements que les fournisseurs ont fait pour éviter (comme d'habitude, douteuse) les brevets Applet. Quelques plus de détails ici: http://commonsware.com/blog/2012/07/24/linkify-problem-detection-mitigation.html –

0

J'utilise queryIntentActivities de classe PackageManager dans une méthode statique:

public static boolean canOpenIntent(Context context, Intent intent) 
{ 
    boolean canOpenUrl = false; 
    PackageManager packageManager  = context.getPackageManager(); 
    List<ResolveInfo> resolvedActivities = packageManager.queryIntentActivities(intent, 0); 
    if(resolvedActivities.size() > 0) 
     canOpenUrl = true; 
    return canOpenUrl; 
} 
Questions connexes