无法从文件URI加载内容

时间:2013-09-30 18:55:53

标签: android file imageview mime-types

您好我有一个媒体文件URI,我想确定mimetype并以通用方式调用适当的活动,以下是我的代码。

mediaUri = Uri.parse(filePath);

String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

Intent viewMediaIntent = new Intent();
viewMediaIntent.setAction(Intent.ACTION_VIEW);
viewMediaIntent.setDataAndType(mediaUri,mimeType);
viewMediaIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
viewMediaIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(viewMediaIntent);

现在问题很少,文件uris无法正常工作。但是同样的uri如果转换为http uri并从浏览器加载它们工作正常。或任何其他应用程序能够加载它们,

不起作用的示例URI
file:///storage/emulated/0/Samsung/Image/001.JPG file:///storage/emulated/0/Samsung/Music/Over the horizon.mp3

错误:

09-30 12:07:44.531: I/System.out(26771): Item Selected: file:///storage/emulated/0/Samsung/Image/001.JPG`
09-30 12:07:44.531: I/System.out(26771): mime type: null`
09-30 12:07:44.534: D/AndroidRuntime(26771): Shutting down VM`
09-30 12:07:44.534: W/dalvikvm(26771): threadid=1: thread exiting with uncaught exception (group=0x41e50ac8)`
09-30 12:07:44.545: E/AndroidRuntime(26771): FATAL EXCEPTION: main`
09-30 12:07:44.545: E/AndroidRuntime(26771): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/Samsung/Image/001.JPG flg=0x14000000 }`
09-30 12:07:44.545: E/AndroidRuntime(26771):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622)`
09-30 12:07:44.545: E/AndroidRuntime(26771):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)`

2 个答案:

答案 0 :(得分:2)

我明白了。

String mimeType;
if (uri.toString().lastIndexOf(".") != -1) {
String ext = uri.toString().substring(
    uri.toString().lastIndexOf(".") + 1);
    MimeTypeMap mime = MimeTypeMap.getSingleton();
mimeType = mime.getMimeTypeFromExtension(ext.toLowerCase());
} else {
mimeType = null;
}

使用这种方法,我能够获得正确的mimetype,并且加载工作正常。

答案 1 :(得分:1)

只需在此getFileExtensionFromUrl(url)上调用MimeTypeMap方法即可以更优雅的方式获取扩展程序

public static String getMimeType(String url)
  {
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);
    if (extension != null) {
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        type = mime.getMimeTypeFromExtension(extension);
    }
    return type;
  }