【问题标题】:Unable to load content from File URI无法从文件 URI 加载内容
【发布时间】:2013-10-06 18:10:01
【问题描述】:

您好,我有一个媒体文件 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)`

【问题讨论】:

  • 解释“不工作”
  • 我已经用错误日志更新了编辑。基本上它找不到 mime 类型,因此无法加载。

标签: android file imageview mime-types


【解决方案1】:

我想通了。

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 并且加载工作正常。

【讨论】:

    【解决方案2】:

    您可以通过像这样在MimeTypeMap 上调用getFileExtensionFromUrl(url) 方法以更优雅的方式获取扩展程序

    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;
      }
    

    【讨论】:

    • 然后就像在 sn-p 中一样将其设置为小写,我的帖子是关于通过使用 getFileExtensionFromUrl(url) 避免弄乱字符串索引
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多