2010-06-09 9 views
1

Les applications peuvent avoir un nombre quelconque d'activités pouvant être lancées. Je sais comment obtenir la liste de ces activités via PackageManager.Déterminer si une activité spécifique d'une application peut être lancée

Existe-t-il un moyen de déterminer quelles activités peuvent être lancées via startActivity? Par exemple, l'application Documents To Go a différentes activités qui vont démarrer Word, Excel, Powerpoint, PDF, etc ... Je suis capable de lancer tout cela très bien.

Cependant, il contient aussi des activités que je ne suis pas capable de lancer avec startActivity ... Si j'essaie de faire cela, j'ai une SecurityException.

Je veux être en mesure de déterminer quelles activités que je peux en toute sécurité et lancer que je ne peux pas je présente donc que l'utilisateur une liste des activités que je peux en toute sécurité à partir de lancer mon application ...

Est-ce possible?

Répondre

1

Créez l'intention avec les paramètres/données que vous possédez, puis utilisez la méthode resolveActivity() du gestionnaire de packages pour rechercher l'activité qui traitera votre demande.

Ensuite, vérifiez les autorisations en utilisant la méthode checkPermission() de PackageManager.

HTH!

+0

Merci! Je vais regarder dans cela ... – Justin

+0

Malheureusement, la méthode resolveActivity() est seulement pour les intentions implicites. Puisque j'ai les noms de paquet et de classe pour les activités que je lance (je les reçois via PackageManager) cette méthode ne fonctionnera pas pour ce que je veux faire. Je n'ai aucun problème à trouver l'activité à lancer. Le problème est que lorsque j'essaie de le lancer via startActivity(), j'obtiens une erreur SecurityException ... Toutes les autres suggestions sont les bienvenues. – Justin

+0

Pour ce que ça vaut, l'erreur exacte que je reçois de la SecurityException est la suivante: Permission Denial: début Intention {flg = 0x10600000 cmp = com.dataviz.docstogo/com.dataviz.dxtg.common.android.WelcomeScreenActivity} de ProcessRecord { 43565cb0 14660: com.magouyaware.appswipe/10043} (pid = 14660, uid = 10043) requiert null – Justin

0

Ceci est probablement vieux chapeau pour vous, mais vous pouvez utiliser cette méthode:

getPackageManager().getLaunchIntentForPackage(
       packageName); 

est ici un moyen d'obtenir les noms de paquets d'applications installées:

final PackageManager pm = getPackageManager(); 

     List<ApplicationInfo> packages = pm 
       .getInstalledApplications(PackageManager.GET_META_DATA); 

     for (ApplicationInfo packageInfo : packages) { 

      Log.d(TAG, "Installed package :" + packageInfo.packageName); 
      Log.d(TAG, 
        "Launch Activity :" 
          + pm.getLaunchIntentForPackage(packageInfo.packageName)); 

     } 
+0

Merci Nelson, mais cela ne pas réellement répondre à ma question. Le code que vous avez trouvé l'intention de lancer l'activité par défaut pour un paquet donné. Mon exigence est différente. J'ai déjà le nom du paquet et le nom de la classe pour une activité donnée ... Dans la plupart des cas, je peux le lancer avec une intention explicite. Cependant, dans certains cas, je reçois une erreur d'autorisation refusée ... Tous mes efforts pour vérifier si j'ai l'autorisation de lancer l'activité sont ignorés et je reçois toujours l'autorisation SecurityException disant que l'autorisation est refusée. – Justin

+0

Ah, je comprends maintenant. Si vous êtes capable d'attraper l'erreur, c'est probablement aussi bon que possible. Désolé je ne pouvais pas aider. –

Questions connexes