2013-09-30 69 views
0

嗨,我有一個媒體文件URI,我想確定mimetype並以通用方式調用相應的活動,以下是我的代碼。無法從文件URI加載內容

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

得到一個更優雅的方式擴展解釋「不工作」 – Asahi

+0

我已經更新了錯誤日誌的編輯。基本上它沒有找到MIME類型,因此無法加載。 – blganesh101

回答

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和加載工作正常。

1

你可以簡單地通過調用MimeTypeMapgetFileExtensionFromUrl(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; 
    } 
+0

如果文件名爲大寫,這不起作用。 – blganesh101

+0

然後,只需將它設置爲小寫,就像你在代碼片段中做的那樣,我的帖子是通過使用'getFileExtensionFromUrl(url)'來避免與字符串索引混淆。 – Guerneen4