web-dev-qa-db-fra.com

Comment vérifier si une intention peut être traitée à partir d'une activité?

J'ai cette méthode jusqu'à présent, mais elle est apparue comme si quelque chose manquait

par exemple, j'ai un fichier /sdcard/sound.3ga qui renvoie faux (comme il n'y a aucune activité pouvant gérer ce type de fichier), mais quand je l'ouvre à partir du gestionnaire de fichiers, il s'ouvre avec le lecteur multimédia sans problème.

Je pense que cette intention n'est pas complète et que je dois faire quelque chose de plus pour m'assurer que la variable handlerExists sera fausse UNIQUEMENT s'il n'y a aucune activité capable de gérer cette intention.

PackageManager pm = getPackageManager();
Intent intent = new Intent(Android.content.Intent.ACTION_VIEW);
String extension = Android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uriString)).toString());
String mimetype = Android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
intent.setDataAndType(Uri.fromFile(new File(uriString)),mimetype);
boolean handlerExists = intent.resolveActivity(pm) != null;
99
Lukap

la solution d'Edwardxu fonctionne parfaitement pour moi.

Juste pour clarifier un peu:

PackageManager packageManager = getActivity().getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent);
} else {
    Log.d(TAG, "No Intent available to handle action");
}
122
Sparky1
PackageManager manager = context.getPackageManager();
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0);
if (infos.size() > 0) {
    //Then there is an Application(s) can handle your intent
} else {
    //No Application can handle your intent
}

Avez-vous essayé cette intention?

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(yourFileHere));
76
Mohammad Ersan
if (intent.resolveActivity(getPackageManager()) == null) {
    // No Activity found that can handle this intent. 
}
else{
    // There is an activity which can handle this intent. 
}
41
edwardaa

Vous pouvez utiliser:

public static boolean isAvailable(Context ctx, Intent intent) {
   final PackageManager mgr = ctx.getPackageManager();
   List<ResolveInfo> list =
      mgr.queryIntentActivities(intent, 
         PackageManager.MATCH_DEFAULT_ONLY);
   return list.size() > 0;
}
2
Pedro Lobito