tipo - reproducir archivos nfv android
¿Lanzar un intento de archivo y tipo MIME? (2)
He revisado todas las preguntas similares aquí, pero no puedo por mi vida averiguar qué estoy haciendo mal.
He escrito una aplicación que intenta lanzar varios archivos, una especie de buscador de archivos. Cuando se hace clic en un archivo, intenta iniciar el programa en función de su tipo MIME asociado o presenta el cuadro de diálogo "Elegir aplicación para iniciar".
Aquí está el código que estoy usando para lanzar:
File file = new File(app.mediaPath() + "/" +_mediaFiles.get(position));
Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
myIntent.setDataAndType(Uri.fromFile(file),mimetype);
startActivity(myIntent);
Esto falla y genera el error:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///file:/mnt/sdcard/roms/nes/Baseball_simulator.nes }
Ahora, si instalo el Administrador de archivos OI, por ejemplo, se abre en lugar de que se lance este error, y luego si hago clic en el mismo archivo desde dentro, se inician los diálogos apropiados.
Me he dado cuenta de que el tipo MIME para ese archivo en particular falla, pero otros tipos mime como .zip
devuelven valores.
¿Me falta algo que cuando el tipo MIME es nulo para llamar a un cuadro de diálogo que permite al usuario seleccionar?
He intentado otras variaciones de inicio de la aplicación, que incluyen no configurar el tipo MIME y solo usar .setData
sin éxito.
La acción que deseo que ocurra es que un usuario haga clic en un archivo, si está asociado con una aplicación que la aplicación inicia, si no, el usuario obtiene el cuadro de diálogo "Completar acción usando" con una lista de aplicaciones.
Gracias por cualquier consejo.
Bueno, gracias a los chicos de Open Intent, me perdí la respuesta la primera vez a través de su código en su administrador de archivos, esto es lo que terminé con:
File file = new File(filePath);
MimeTypeMap map = MimeTypeMap.getSingleton();
String ext = MimeTypeMap.getFileExtensionFromUrl(file.getName());
String type = map.getMimeTypeFromExtension(ext);
if (type == null)
type = "*/*";
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.fromFile(file);
intent.setDataAndType(data, type);
startActivity(intent);
Si utiliza un tipo mime de "* / *"
cuando no puede determinarlo desde el sistema (es null
), se abrirá el cuadro de diálogo de selección correspondiente.
Puede usar intentos genéricos para abrir archivos, como este fragmento de código que se propone here :
private void openFile(File aFile){
try {
Intent myIntent = new Intent(android.content.Intent.VIEW_ACTION,
new ContentURI("file://" + aFile.getAbsolutePath()));
startActivity(myIntent);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
Pero generalmente veo que las aplicaciones verifican la extensión del archivo en anidado si y finalmente intento abrir el archivo con el tipo " texto / sin formato ":
Intent generic = new Intent();
generic.setAction(android.content.Intent.ACTION_VIEW);
generic.setDataAndType(Uri.fromFile(file), "text/plain");
try {
startActivity(generic);
} catch(ActivityNotFoundException e) {
...
}
Puede ver el código completo en esta pregunta o en este proyecto de código abierto . Espero que esto te ayude.