1) Use ActionView to open the file:
private void openFile(File file) { Intent intent = new Intent(); intent.AddFlags(ActivityFlags.NewTask); intent.SetAction(Intent.ActionView); string type = getMIMEType(file); intent.SetDataAndType(Uri.FromFile(file), type); StartActivity(intent); }
2)Get the MIME type by file extension:
private string getMIMEType(File file) { string type = "*/*"; string fName = file.Name; int dotIndex = fName.LastIndexOf("."); if (dotIndex < 0) { return type; } // get the file extension string end = fName.Substring(dotIndex, fName.Length).ToLower(); if (end == "") return type; //from MIME_MapTable to get the respond type for (int i = 0; i < MIME_MapTable.Length; i++) { if (end.Equals(MIME_MapTable[i,0])) type = MIME_MapTable[i,1]; } return type; }
3) Here is the MIME_MapTable array:
public string[,] MIME_MapTable = new string[,] { {".3gp", "video/3gpp"}, {".apk", "application/vnd.android.package-archive"}, {".asf", "video/x-ms-asf"}, {".avi", "video/x-msvideo"}, {".bin", "application/octet-stream"}, {".bmp", "image/bmp"}, {".c", "text/plain"}, {".class", "application/octet-stream"}, {".conf", "text/plain"}, {".cpp", "text/plain"}, {".doc", "application/msword"}, {".exe", "application/octet-stream"}, {".gif", "image/gif"}, {".gtar", "application/x-gtar"}, {".gz", "application/x-gzip"}, {".h", "text/plain"}, {".htm", "text/html"}, {".html", "text/html"}, {".jar", "application/java-archive"}, {".java", "text/plain"}, {".jpeg", "image/jpeg"}, {".jpg", "image/jpeg"}, {".js", "application/x-javascript"}, {".log", "text/plain"}, {".m3u", "audio/x-mpegurl"}, {".m4a", "audio/mp4a-latm"}, {".m4b", "audio/mp4a-latm"}, {".m4p", "audio/mp4a-latm"}, {".m4u", "video/vnd.mpegurl"}, {".m4v", "video/x-m4v"}, {".mov", "video/quicktime"}, {".mp2", "audio/x-mpeg"}, {".mp3", "audio/x-mpeg"}, {".mp4", "video/mp4"}, {".mpc", "application/vnd.mpohun.certificate"}, {".mpe", "video/mpeg"}, {".mpeg", "video/mpeg"}, {".mpg", "video/mpeg"}, {".mpg4", "video/mp4"}, {".mpga", "audio/mpeg"}, {".msg", "application/vnd.ms-outlook"}, {".ogg", "audio/ogg"}, {".pdf", "application/pdf"}, {".png", "image/png"}, {".pps", "application/vnd.ms-powerpoint"}, {".ppt", "application/vnd.ms-powerpoint"}, {".prop", "text/plain"}, {".rar", "application/x-rar-compressed"}, {".rc", "text/plain"}, {".rmvb", "audio/x-pn-realaudio"}, {".rtf", "application/rtf"}, {".sh", "text/plain"}, {".tar", "application/x-tar"}, {".tgz", "application/x-compressed"}, {".txt", "text/plain"}, {".wav", "audio/x-wav"}, {".wma", "audio/x-ms-wma"}, {".wmv", "audio/x-ms-wmv"}, {".wps", "application/vnd.ms-works"}, //{".xml", "text/xml"}, {".xml", "text/plain"}, {".z", "application/x-compress"}, {".zip", "application/zip"}, {"", "*/*"} };
Note:
If you want your app to run on >7.0, you need use FileProvider.
For .pdf-Files I am using a WebView which opens the .pdf-Files at the given path. Impossible. A WebView cannot display a .pdf file.webView.LoadUrl(string.Format("file:///android_asset/pdfjs/web/viewer.html?file={0}", pathTmp));to open a PDF via WebView with just my given path of the file in the storageviewer.htmlInteresting! A pdf to html convertor. Who wrote the source for that file? What is its secret?