phonegap附件下載及打開附件

   【原創】轉載請註明出處!     javascript

   在開發web app而且使用phonegap的狀況下,附件下載着實是一件使人頭疼的事,什麼window.open或者window.location.href在webview中都不起做用,網上查了許久,沒有一篇完整講述「phonegap附件下載及打開附件」的例子,如今分享一下。 html

    首先,若是你能夠接受的話,能夠使用一種極其簡單的方式來完成,點擊操做以後,跳入手機默認瀏覽器進行下載,代碼以下     navigator.app.loadUrl(encodeURI(url), { openExternal:true});     注意,參數必定要加{ openExternal:true}參數,這個參數表明在另外的瀏覽器打開。     若是你不知足於這種方式,能夠使用如下方法:     phonegap附件下載,使用的方法是phonegap自帶的下載附件的方式,而打開附件用到的是phonegap插件,最終由安卓原生代碼來完成,很少說,代碼以下:     1. html文件(cordova.js是phonegap的庫文件)     <html>   <head>     <meta charset="UTF-8">     <title>phonegap文件下載</title>      <script type="text/javascript" src="cordova.js"></script>     <script type="text/javascript">     window.appRootDirName = "download_test";     document.addEventListener("deviceready", onDeviceReady, false);     function onDeviceReady() {         console.log("device is ready");         window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);     }     function fail() {         console.log("failed to get filesystem");     }     function gotFS(fileSystem) {         console.log("filesystem got");         window.fileSystem = fileSystem;         fileSystem.root.getDirectory(window.appRootDirName, {             create : true,             exclusive : false         }, dirReady, fail);     }     function dirReady(entry) {         window.appRootDir = entry;         console.log("application dir is ready");     }     downloadFile = function(){                  alert("start");         var fileTransfer = new FileTransfer();         var uri = encodeURI("http://12.130.30.22:8080/uploadImagetest.xls");         var filePath = window.appRootDir.fullPath + "/test.xls";                  alert(window.appRootDir.fullPath);         fileTransfer.download(             uri,             filePath,             function(entry) {                 alert("success");                 alert(entry.fullPath);                 //此處調用打開文件方法                 OpenFile(entry.fullPath);                 //window.location.href = window.appRootDir.fullPath;                 console.log("download complete: " + entry.fullPath);             },             function(error) {                 alert("error");                 alert(JSON.stringify(error));                 console.log("download error source " + error.source);                 console.log("download error target " + error.target);                 console.log("upload error code" + error.code);             }         );        }     function OpenFile(path){         try {             alert('OpenFile');             var array = [];             array[0] = path;             alert(array[0]);             cordova.exec(function(message) {             }, null, 'OpenFilePlugin', 'haha', array);         } catch(e) {             alert(e.message);         }     } </script> </head> <body>     <a href="#" onclick="downloadFile()">Download File</a> </body> </html> 2. java文件 import java.io.File;   import java.io.FileNotFoundException;   import java.io.FileOutputStream;   import java.io.IOException;   import java.io.InputStream;   import java.net.HttpURLConnection;   import java.net.URL;      import org.apache.cordova.api.CallbackContext; import org.apache.cordova.api.CordovaPlugin; import org.apache.cordova.api.PluginResult;   import org.json.JSONArray;   import org.json.JSONException;   import org.json.JSONObject;      import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Environment;   import android.util.Log;      public class OpenFilePlugin extends CordovaPlugin {       @Override     public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {           try {             Context context = cordova.getActivity().getApplicationContext();             //文件路徑             String path = args.getString(0).toLowerCase();                          int len = path.length();             String lastThree = path.substring(len-3, len);             String lastFour = path.substring(len-4, len);             //判斷文件類型             //doc             if(lastThree.equals("doc") || lastFour.equals("docx")){                 Intent i = this.getWordFileIntent(path);                 context.startActivity(i);             }             //excel             else if(lastThree.equals("xls") || lastFour.equals("xlsx")){                 Intent i = this. getExcelFileIntent(path);                 context.startActivity(i);             }             //ppt             else if(lastThree.equals("ppt") || lastFour.equals("pptx")){                 Intent i = this. getPptFileIntent(path);                 context.startActivity(i);             }             //pdf             else if(lastThree.equals("pdf")){                 Intent i = this.getPdfFileIntent(path);                 context.startActivity(i);             }             //圖片             else if(lastThree.equals("jpg") || lastThree.equals("png")                      || lastThree.equals("gif") || lastThree.equals("bmp")                     || lastFour.equals("jpeg")){                 Intent i = this.getImageFileIntent(path);                 context.startActivity(i);             }             //文本             else if(lastThree.equals("txt")){                 Intent i = this.getTextFileIntent(path, false);                 context.startActivity(i);             }             //html             else if(lastThree.equals("htm") || lastFour.equals("html")){                 Intent i = this.getHtmlFileIntent(path);                 context.startActivity(i);             }             //chm             else if(lastThree.equals("chm")){                 Intent i = this.getChmFileIntent(path);                 context.startActivity(i);             }             //音頻             else if(lastThree.equals("mp3") || lastThree.equals("wav")                     || lastThree.equals("wma") || lastThree.equals("ogg")                     || lastThree.equals("ape") || lastThree.equals("acc")){                 Intent i = this.getAudioFileIntent(path);                 context.startActivity(i);             }             //視頻             else if(lastThree.equals("avi") || lastThree.equals("mov")                     || lastThree.equals("asf") || lastThree.equals("wmv")                     || lastThree.equals("navi") || lastThree.equals("3gp")                     || lastThree.equals("ram") || lastThree.equals("mkv")                     || lastThree.equals("flv") || lastThree.equals("mp4")                     || lastFour.equals("rmvb") || lastThree.equals("mpg")){                 Intent i = this.getVideoFileIntent(path);                 context.startActivity(i);             }             else{                 callbackContext.success("沒法打開該文件!");             }                              Intent i = getExcelFileIntent(path);             context.startActivity(i);         } catch (JSONException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }                  return true;              }       //android獲取一個用於打開Excel文件的intent     public static Intent getExcelFileIntent(String param ){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addCategory("android.intent.category.DEFAULT");              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              Uri uri = Uri.fromFile(new File(param));              intent.setDataAndType(uri, "application/vnd.ms-excel");              return intent;     }     //android獲取一個用於打開HTML文件的intent     public static Intent getHtmlFileIntent( String param ){         Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param ).build();              Intent intent = new Intent("android.intent.action.VIEW");              intent.setDataAndType(uri, "text/html");              return intent;     }     //android獲取一個用於打開圖片文件的intent     public static Intent getImageFileIntent( String param ){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addCategory("android.intent.category.DEFAULT");              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              Uri uri = Uri.fromFile(new File(param ));              intent.setDataAndType(uri, "image/*");              return intent;     }     //android獲取一個用於打開PDF文件的intent     public static Intent getPdfFileIntent( String param ){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addCategory("android.intent.category.DEFAULT");              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              Uri uri = Uri.fromFile(new File(param ));              intent.setDataAndType(uri, "application/pdf");              return intent;     }     //android獲取一個用於打開文本文件的intent     public static Intent getTextFileIntent( String param, boolean paramBoolean){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addCategory("android.intent.category.DEFAULT");              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              if (paramBoolean){                  Uri uri1 = Uri.parse(param );                      intent.setDataAndType(uri1, "text/plain");              }else{                  Uri uri2 = Uri.fromFile(new File(param ));                      intent.setDataAndType(uri2, "text/plain");              }              return intent;     }     //android獲取一個用於打開音頻文件的intent     public static Intent getAudioFileIntent( String param ){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);              intent.putExtra("oneshot", 0);              intent.putExtra("configchange", 0);              Uri uri = Uri.fromFile(new File(param ));              intent.setDataAndType(uri, "audio/*");              return intent;     }     //android獲取一個用於打開視頻文件的intent     public static Intent getVideoFileIntent( String param ){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);              intent.putExtra("oneshot", 0);              intent.putExtra("configchange", 0);              Uri uri = Uri.fromFile(new File(param ));              intent.setDataAndType(uri, "video/*");              return intent;     }     //android獲取一個用於打開CHM文件的intent     public static Intent getChmFileIntent( String param ){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addCategory("android.intent.category.DEFAULT");              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              Uri uri = Uri.fromFile(new File(param ));              intent.setDataAndType(uri, "application/x-chm");              return intent;     }     //android獲取一個用於打開Word文件的intent     public static Intent getWordFileIntent( String param ){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addCategory("android.intent.category.DEFAULT");              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              Uri uri = Uri.fromFile(new File(param ));              intent.setDataAndType(uri, "application/msword");              return intent;     }     //android獲取一個用於打開PPT文件的intent     public static Intent getPptFileIntent( String param ){         Intent intent = new Intent("android.intent.action.VIEW");              intent.addCategory("android.intent.category.DEFAULT");              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);              Uri uri = Uri.fromFile(new File(param ));              intent.setDataAndType(uri, "application/vnd.ms-powerpoint");              return intent;     }    }   3. config.xml <plugins>         <plugin name="OpenFilePlugin" value="yourPackage.OpenFilePlugin"/> </plugins> 大功告成!
相關文章
相關標籤/搜索