phonegap 文件下载
效果图:
package com.phonegap.plugins.downloader; 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.Plugin; import org.apache.cordova.api.PluginResult; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.os.Environment; import android.util.Log; public class Downloader extends Plugin { @Override public PluginResult execute(String action, JSONArray args, String callbackId) { if (!action.equals("downloadFile")) return new PluginResult(PluginResult.Status.INVALID_ACTION); try { String fileUrl = args.getString(0); JSONObject params = args.getJSONObject(1); String fileName = params.has("fileName") ? params .getString("fileName") : fileUrl.substring(fileUrl .lastIndexOf("/") + 1); String dirName = params.has("dirName") ? params .getString("dirName") : Environment .getExternalStorageDirectory().getPath() + "/download"; Boolean overwrite = params.has("overwrite") ? params .getBoolean("overwrite") : false; return this.downloadUrl(fileUrl, dirName, fileName, overwrite, callbackId); } catch (JSONException e) { e.printStackTrace(); return new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage()); } catch (InterruptedException e) { e.printStackTrace(); return new PluginResult(PluginResult.Status.ERROR, e.getMessage()); } } private PluginResult downloadUrl(String fileUrl, String dirName, String fileName, Boolean overwrite, String callbackId) throws InterruptedException, JSONException { try { Log.d("PhoneGapLog", "Downloading " + fileUrl + " into " + dirName + "/" + fileName); File dir = new File(dirName); if (!dir.exists()) { Log.d("PhoneGapLog", "directory " + dirName + " created"); dir.mkdirs(); } File file = new File(dirName, fileName); if (!overwrite && file.exists()) { Log.d("DownloaderPlugin", "File already exist"); JSONObject obj = new JSONObject(); obj.put("status", 1); obj.put("total", 0); obj.put("file", fileName); obj.put("dir", dirName); obj.put("progress", 100); return new PluginResult(PluginResult.Status.OK, obj); } URL url = new URL(fileUrl); HttpURLConnection ucon = (HttpURLConnection) url.openConnection(); ucon.setRequestMethod("GET"); ucon.connect(); Log.d("PhoneGapLog", "Download start"); InputStream is = ucon.getInputStream(); byte[] buffer = new byte[1024]; int readed = 0, progress = 0, totalReaded = 0, fileSize = ucon .getContentLength(); FileOutputStream fos = new FileOutputStream(file); while ((readed = is.read(buffer)) > 0) { fos.write(buffer, 0, readed); totalReaded += readed; int newProgress = (int) (totalReaded * 100 / fileSize); if (newProgress != progress) progress = informProgress(fileSize, newProgress, dirName, fileName, callbackId); } fos.close(); Log.d("PhoneGapLog", "Download finished"); JSONObject obj = new JSONObject(); obj.put("status", 1); obj.put("total", fileSize); obj.put("file", fileName); obj.put("dir", dirName); obj.put("progress", progress); return new PluginResult(PluginResult.Status.OK, obj); } catch (FileNotFoundException e) { Log.d("PhoneGapLog", "File Not Found: " + e); return new PluginResult(PluginResult.Status.ERROR, 404); } catch (IOException e) { Log.d("PhoneGapLog", "Error: " + e); return new PluginResult(PluginResult.Status.ERROR, e.getMessage()); } } private int informProgress(int fileSize, int progress, String dirName, String fileName, String callbackId) throws InterruptedException, JSONException { JSONObject obj = new JSONObject(); obj.put("status", 0); obj.put("total", fileSize); obj.put("file", fileName); obj.put("dir", dirName); obj.put("progress", progress); PluginResult res = new PluginResult(PluginResult.Status.OK, obj); res.setKeepCallback(true); success(res, callbackId); // Give a chance for the progress to be sent to javascript Thread.sleep(100); return progress; } }
function Downloader() { } Downloader.prototype.downloadFile = function(fileUrl, params, win, fail) { // Make params hash optional. if (!fail) win = params; cordova.exec(win, fail, "Downloader", "downloadFile", [ fileUrl, params ]); }; window.downloader = new Downloader();
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="format-detection" content="telephone=no" /> <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> <link rel="stylesheet" type="text/css" href="css/jquerymobile/themes/default/jquery.mobile-1.2.0.min.css" /> <link rel="stylesheet" href="css/style.css" /> <title>PhonegapTest</title> </head> <body> <div data-role="page"> <h3>phonegap 文件下载测试</h3> <div style="padding:20%;"> <img src="#" id="img_001" style="width:150px;height:150px;border:1px solid #ccc;"/> </div> <div>progress:<span id="test_002"></span>%</div> <a data-role="button" id="downloadBtn">download</a> </div> <script type="text/javascript" src="js/cordova-2.2.0.js"></script> <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script> <script type="text/javascript" src="js/jquery.mobile-1.2.0.min.js"></script> <script type="text/javascript" src="js/downloader.js"></script> <script type="text/javascript"> $('#downloadBtn').bind('click',function(){ $('#img_001').attr('src','#'); window.downloader.downloadFile("http://7676.gmcc.net/images/newportal/bnt_tb01b.gif", {overwrite: true}, function(res) { //alert(JSON.stringify(res)); $('#test_002').text(res.progress); if(res.progress==100){ $('#img_001').attr('src',res.dir+'/'+res.file); } }, function(error) { alert(error); } ); }); </script> </body> </html>
相关推荐
自我实现的一个Phonegap实现离线功能,word文档
phonegap实现头像上传修改(php 与android代码)有说明文档。项目代码块,测试可使用。
phonegap选择文件及上传文件插件实现,android studio工程,导入的时候请选择upload/platforms/android目录;选择文件兼容android6.0+闪退的情况,上传文件只是提交文件到服务器,服务器端的上传方法需要自己实现。
1.下载phonegap2.0, 1.1 从解压文件中“phonegap-phonegap-2dbbdab\lib\android”中可以看到以下文件: cordova-2.0.0.jar、cordova-2.0.0.js和xml文件夹。 1.2 从解压文件中找以“phonegap-phonegap-2dbbdab\lib\...
1、结合iscroll动态ajax跨域加载数据2、结合iscroll上拉翻页3、图片上传4、phonegap控制双击返回退出程序5、增加离线浏览功能,实现文字及图片的缓存。6、增加清除缓存功能,包括清除文字和图片的缓存。7、增加开启...
PhoneGap实现手机表单和手机拍照多个图片上传功能以及服务器处理的java相关代码(Android和iPhone)。PhoneGap读取远程HTML文件,此HTML文件是普通的表单和实现手机多个图片拍照的页面(包含上传进度条),提交后保存在...
行动的时候了 - 下载,建设,使用XUI 112 为什么不能jQuery的? 121 HTML5的123 媒体元素123 时间F或行动 - 我与PhoneGap 124晚餐 媒体事件和属性128 音频元素129 canvas元素130 时间F或行动:晚餐仪表板131 帆布的...
这个 Cordova / PhoneGap (3.5+) 插件通过利用原生音频 API 在基于音频的应用程序中实现并发(多声道播放)、复音(多语音播放)和最小化延迟(通过缓存)。设计用于基于 HTML5 的跨平台游戏和移动/混合音频应用程序...
该项目文件集成了Cordova自带的通讯录插件,以及自己封装好的Cordova插件,可添加打开通讯录
phonegap-xapkreader Cordova插件可访问Cordova / Phonegap Android应用程序的APK扩展文件中的文件。 该插件是此处所述过程的实现: 安装 该插件使用Cordova CLI的plugin命令... 下载后用于验证文件的完整性。 安装
phonegap插件开发(功能实现:获取第三方应用,打开第三方应用,判断第三方应用程序是否正在运行,获取手机全球唯一序列号,判断文件是否存在)
首先要了解PhoneGap是什么,这是一个开源的移动开发框架,能真正实现Writtenonceruneverywhere,能基于HTML5+CSS+JavaScript等标准协议开发跨平台的移动应用。亮点是对智能手机本地功能的调用,如摄像头、地理位置、...
uMobile PhoneGap 什么是uMobile? uMobile 是一项新的开源计划,旨在将校园应用程序、内容和数据引入移动设备。 该项目为 iPhone 和 Android 设备提供本机应用程序,以及为其他智能手机提供基于浏览器的内容。 ...
在PhoneGap应用中生成pdf文件,实现起来很简单,使用JSPDF这个标准的JavaScript类库来实现这个功能
Cordova / PhoneGap 的 FileOperations 插件这个插件用于在android中复制、移动和删除文件,但为什么不是FileTransfer? 因为文件传输没有实现来处理大文件,所以如果你需要使用 FileTransfer.download 来处理复制...
游戏作者kailee游戏演示网址游戏说明对Flappy Bird游戏的重新实现修改说明使用HTML5+Phaser重新实现其他平台通过 NWJS 打包为桌面应用(ps.缺点是文件太大了)通过 Phonegap 实现移动端体验
实现它的步骤很简单: 安装 Wordpress 博客按照此处的说明操作: : 将此存储库中“/server”中的文件复制到您的主 Wordpress 安装文件夹(wp-header.php 文件所在的位置) 更改“www/js/index.js”JavaScript 文件...
##### 文档 ###### 开发平台 主要的开发工具是Phonegap平台,它允许我们使用 HTML5、CSS 和 Javascript 技术创建混合应用程序,并通过 Javascript API 与组件交互的移动设备。 ###### 开发方法** Mobile D ** 是...
用JS实现调出摄像头拍照或...文件比较大,截止到目前, Visual Studio 2015 也加入了完善的Android仿真器,及PhoneGap的js端能力库,故在VS2015 IDE中也应该可以实现JS的端能力拍照选图、相册选图等(VS上的我没试过)