intents intent example camara activity android android-intent mime-types file-type intentfilter

example - intent send android



¿Cómo verificar si se puede manejar un intento de alguna actividad? (4)

Tengo este método hasta ahora, pero surgió como si faltara algo

por ejemplo, tengo un archivo /sdcard/sound.3ga que devuelve falso (como que no hay actividad que pueda manejar este tipo de archivo), pero cuando lo abro desde el administrador de archivos se abre con el reproductor multimedia sin ningún problema

Creo que este intento no está completo y tengo que hacer algo más para asegurarme de que la variable handlerExists será falsa SÓLO si no hay actividad que pueda manejar esta intención.

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 solución de edwardxu funciona perfectamente para mí.

Solo para aclarar un poco:

PackageManager packageManager = getActivity().getPackageManager(); if (intent.resolveActivity(packageManager) != null) { startActivity(intent); } else { Log.d(TAG, "No Intent available to handle action"); }


Puedes usar:

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


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 }

¿Has probado esta intención?

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