I\'ve reviewed all the similar questions here, but I can\'t for the life of me figure out what I\'m doing wrong.
I\'ve written an application that tries to launch va
Well thanks to the Open Intent guys, I missed the answer the first time through their code in their file manager, here's what I ended up with:
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);
If you use a mime type of "* / *" when you can't determine it from the system(it is null) it fires the appropriate select application dialog.
You can use generic intents to open files,like this snippet code that is proposed 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();
}
}
But I usually see that Applications checks the file's extension in nested if and finally try to open file with "text/plain" type:
Intent generic = new Intent();
generic.setAction(android.content.Intent.ACTION_VIEW);
generic.setDataAndType(Uri.fromFile(file), "text/plain");
try {
startActivity(generic);
} catch(ActivityNotFoundException e) {
...
}
You can see complete code in this question or in this open source project. I hope this help you.