Android 无法从文件URI加载内容
您好,我有一个媒体文件URI,我想确定mimetype并以通用方式调用相应的活动,下面是我的代码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);
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并从浏览器加载,则可以正常工作。或者任何其他应用程序都可以加载它们
不起作用的示例URIfile:///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)