Estoy buscando una manera de probar si puedo abrir un determinado intento. Sé cómo probar si una acción está disponible como in this example. Sin embargo, eso no es lo suficientemente bueno, ya que una acción como Intent.ACTION_VIEW puede abrir diferentes aplicaciones dependiendo de la uri presentada.Pruebe si la intención está disponible
punto en caso de:
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url);
startActivity(i);
Esto abrirá una aplicación diferente para diferentes URL, tales como:
url = "ftp://192.168.1.1"
url = "http://192.168.1.1"
La url http es bastante seguro: que se abrirá en el navegador web por defecto . La URL del ftp no es así, ya que no es seguro que los usuarios tengan un cliente FTP instalado (en mi caso asumo que AndFTP es un cliente, ya que parece ser uno de los clientes más populares, y no hay una forma estándar de enviar un/pw al cliente, así que esto tiene que ser específico de la aplicación).
Así que ahora me gustaría probar no solo si la acción está disponible (el código vinculado será verdadero si http está disponible pero no ftp), sino también si hay una aplicación que pueda manejar la variedad específica. Las pruebas para la aplicación específica también serían aceptables.
Y, finalmente, esto debe incorporarse en una pieza de código que obtiene uno o más URI para elegir, que debe abrir el primero posible, y devolver un código de error si no se pueden abrir URI. Algo como esto pseudo-código:
success = false;
for (Uri uri : uris) {
if (actionAvailable(uri)) {
// set up intent
startActivity(intent);
success = true;
break;
}
}
return success;
No entiendo del todo el problema. El filtro de intenciones debería indicar si son compatibles con http o ftp, por lo que creo que el primer método de ejemplo que publicó debería funcionar o no. http://developer.android.com/guide/topics/manifest/data-element.html#scheme – mibollma
El problema es hacer una prueba adecuada para ver si el intento está disponible y se maneja. Tanto ftp como http (y muchos más) son manejados por Intent.ACTION_VIEW. Capturar un error en startActivity no es el camino a seguir. – Wouter