2011-06-14 8 views
5

Estoy desarrollando una aplicación que enumera los archivos en una carpeta (en un ListView). Cuando el usuario hace clic en uno de los elementos, si se trata de un archivo, me gustaría iniciar una actividad que pueda manejarlo, si existe, o mostrar algún tipo de mensaje de error si no hay ninguno.Lanzar una actividad basada en un archivo en android

¿Cómo puedo hacer eso? No todo, por supuesto, pero ¿cómo puedo determinar qué aplicación (es) puede manejar un archivo, si hay alguno?

+0

Hay muchos otros mensajes similares sobre este pero nada esta específica y nada que responde a mi pregunta, por favor lea cuidadosamente los otros puestos antes de marcar esto como un duplicado. – Gallal

Respuesta

0

Basado en ...

cómo puedo determinar qué aplicación (s) puede manejar un archivo, si las hay?

Creo que lo que quiere es PackageManager.queryIntentActivities donde crea una intención basada en el archivo de destino y luego lee la lista devuelta.

7

Primero, deberá determinar el tipo MIME del archivo. Esto se puede hacer usando MimeTypeMap:

MimeTypeMap map = MimeTypeMap.getSingleton(); 
String extension = map.getFileExtensionFromUrl(url); // url is the url/location of your file 
String type = map.getMimeTypeFromExtension(extension); 

A continuación, una vez que conozca el tipo MIME, puede crear una intención para ese tipo:

Intent intent = new Intent(); 
intent.setType(type); 

Por último, se quiere comprobar si las actividades pueden resolver el intento con ese tipo. Esto se puede hacer a través de la PackageManager:

PackageManager manager = getPackageManager(); // I'm assuming this is done from within an activity. This a Context method. 
List<ResolveInfo> resolvers = manager.queryIntentActivities(intent, 0); 
if (resolvers.isEmpty()) { 
    // display error 
} else { 
    // launch the intent. You will also want to set the data based on the uri of your file 
} 
+0

Intenté esto, y funciona bien con algunas extensiones como 'pdf' y 'doc', pero me da una larga lista de no-sentido cuando uso 'JPG'; muestra herramientas del sistema como GPS como una aplicación que puede manejar 'JPG'. ¿Cualquier otra sugerencia? – Gallal

+1

También hay un método getPreferredActivities() en el PackageManager que puede aprovechar para determinar si hay una aplicación preferida para manejar un tipo MIME específico, pero de lo contrario, ese es el comportamiento previsto de Android. – Noel

Cuestiones relacionadas