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;
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");
}
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));
if (intent.resolveActivity(getPackageManager()) == null) {
// No Activity found that can handle this intent.
}
else{
// There is an activity which can handle this intent.
}
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;
}