我正在尝试发布允许用户打开本地存储文件的通知。我的代码如下所示:
Intent notificationIntent = new Intent(Intent.ACTION_VIEW);
notificationIntent.setAction(android.content.Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(new File(filename));
notificationIntent.setData(uri);
其中“filename”是本地存储文件的完整路径,通常位于/mnt/sdcard/download
目录中。我想要显示的文件有各种类型:图像,PDF文档,HTML等。
这样可行,但有时Android会尝试将文件作为错误类型打开。例如,jpeg文件将在Web浏览器视图中打开,而不是看到图像,我看到文件中的二进制数据显示为文本。其他时候它工作文件。例如,某些PDF文件在PDF查看器中正确打开,而某些PDF文件则没有。
我不确定为什么会这样。文档说我不应该传递明确的内容类型。如果我明确设置内容类型,事情似乎工作正常。问题是,我并不总是知道内容类型应该是什么(文件是从外部源下载的,可以是任何内容,不是,MIME类型不在HTTP头中,我检查了它。) / p>
我可以在这做什么?是否有一些我可以用文件名调用的函数让Android返回该文件的最佳内容类型?此外,为什么在处理Intent时不会自动发生这种情况?
感谢。
答案 0 :(得分:3)
你最有可能想到这一点;我张贴以防其他人被困在这上面。我执行以下操作来获取文件的mime类型:
//Get the file path
Uri path = Uri.fromFile(file);
MimeTypeMap type_map = MimeTypeMap.getSingleton();
//Get the extension from the path
String extension = MimeTypeMap.getFileExtensionFromUrl(path.toString());
extension = extension.toLowerCase();
if (extension.contains(".")) {
extension = extension.substring(extension.lastIndexOf("."));
}
String mime_type = type_map.getMimeTypeFromExtension(extension);