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> 大功告成!
相关文章
相关标签/搜索