Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从文件URI加载内容_Android_File_Imageview_Mime Types - Fatal编程技术网

Android 无法从文件URI加载内容

Android 无法从文件URI加载内容,android,file,imageview,mime-types,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);

您好,我有一个媒体文件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);
现在的问题是,很少有文件URI不工作。但相同的uri如果转换为http uri并从浏览器加载,则可以正常工作。或者任何其他应用程序都可以加载它们

不起作用的示例URI
file:///storage/emulated/0/Samsung/Image/001.JPG
file:///storage/emulated/0/Samsung/Music/Over 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)`
我想出来了

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

我明白了

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

只需调用
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;
  }

只需调用
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;
  }

解释“不工作”我已经用错误日志更新了编辑。基本上它找不到mime类型,因此无法加载。解释“不工作”我已经用错误日志更新了编辑。基本上,它找不到mime类型,因此无法加载。然后就像在代码段中一样将其设置为小写。我的帖子是关于通过使用
getFileExtensionFromUrl(url)
避免弄乱字符串索引,然后像在代码段中一样将其设置为小写,我的帖子是关于通过使用
getFileExtensionFromUrl(url)