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