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>
相关推荐
开发者可以创建、读取、修改和删除文件,这对于实现文件下载至关重要。 2. **FileTransfer对象**:PhoneGap提供了FileTransfer对象,用于上传和下载文件。通过这个对象,开发者可以指定源URL、目标文件路径,以及...
《使用PhoneGap实现离线功能的技术探索》 PhoneGap,一个强大的跨平台移动应用开发框架,以其独特的HTML、CSS和JavaScript技术,让开发者能够轻松构建原生移动应用。在许多情况下,尤其是对于那些需要在无网络环境...
在这个“phoneGap实现android平台登录例子”中,我们将探讨如何利用PhoneGap在Android平台上创建一个简单的登录功能,这对于初学者来说是一个很好的入门实践。 首先,我们需要了解PhoneGap的基础知识。PhoneGap是...
这个"PhoneGap Demo下载.rar"文件很显然是一个包含了基础PhoneGap开发示例的压缩包,对于初学者或者遇到环境配置问题的开发者来说,这是一个很好的学习资源。 PhoneGap的核心是基于Apache Cordova,它提供了设备API...
5. **保存图片到应用目录**:PhoneGap提供`File`和`FileTransfer`对象,用于处理文件操作。你可以使用`window.resolveLocalFileSystemURL`获取到图片的文件对象,然后使用`FileWriter`写入到应用的私有目录。这样,...
PhoneGap提供了FileTransfer对象,通过这个对象可以实现文件从本地设备到远程服务器的上传。首先,开发者需要获取到录音文件的URI,然后使用FileTransfer对象的upload方法,指定URL、文件URI、HTTP方法(通常是POST...
在这个特定的场景中,我们要探讨的是如何在PhoneGap 3.0版本上实现“摇一摇”功能来拨打电话。 首先,我们要理解PhoneGap的核心原理:通过WebView将Web应用包装成原生的移动应用,利用JavaScript接口调用设备的API...
1. "深入浅出 phonegap 代码.zip" - 这个文件可能是关于PhoneGap的教程或者示例代码,包含了深入讲解PhoneGap使用方法的代码示例,可以帮助初学者理解PhoneGap的工作原理和实践应用。 2. "ionic-1.1.zip" - 这是...
"是针对Android平台的一个示例项目,特别适合在pad设备上运行,并且包含了自定义插件的实现,这对于深入理解和使用PhoneGap技术尤其有帮助。 1. **PhoneGap基础概念** - PhoneGap基于Apache Cordova,是一个让...
总的来说,PhoneGap提供了一个方便的接口来实现跨平台的文件操作,让Web开发者能够利用熟悉的Web技术来开发具有文件操作功能的移动应用。在实际开发中,应确保遵循各平台的文件系统规范和权限管理,以及处理可能出现...
然后,下载并解压"phonegap-2.9.1"文件,通过命令行工具进行初始化,创建新项目,并配置相应的平台。 4. **开发流程:** - 创建一个基本的HTML5应用结构,包含必要的JavaScript和CSS。 - 使用PhoneGap CLI或配置...
本教程将详细介绍如何使用PhoneGap在Android平台上实现一个新闻客户端,同时连接到MySQL数据库。 首先,我们需要了解PhoneGap的核心概念。PhoneGap提供了一种封装机制,将Web应用程序打包为原生应用,利用WebView...
在这个“phoneGap实现android程序开发代码”中,我们将探讨如何使用PhoneGap进行Android应用开发。 首先,我们需要安装PhoneGap的开发环境。这包括安装Java Development Kit (JDK),Android SDK,以及集成开发环境...
在"自定义plugin插件实现phonegap与Android交互"这个主题中,我们主要关注的是如何通过编写自定义插件来打通JavaScript和Android之间的通信壁垒。在PhoneGap中,Plugin是连接Web层和Native层的桥梁,它们是用Java...
PhoneGap 是一个开源框架...总的来说,下载并研究 PhoneGap 的 Android 源代码,可以加深对 PhoneGap 工作机制的理解,提高开发效率,同时为定制化开发打开新的可能。无论是初学者还是经验丰富的开发者,都能从中获益。
2. **安装PhoneGap Desktop App**:下载并运行提供的PhoneGapSetup-win32-630.exe文件,按照向导完成安装。 3. **创建项目**:启动PhoneGap Desktop App后,通过“新建”按钮创建一个新的项目,填写项目名和ID,...
6. **配置文件**:如`config.xml`是PhoneGap项目的核心配置文件,它定义了应用的元数据、允许使用的API和加载的插件。深入研究这些配置文件,可以更好地控制应用的行为。 7. **性能优化**:Cordova2.9时代的Web技术...
5. 安装PhoneGap:PhoneGap的安装通常涉及到下载PhoneGap库,然后在Eclipse中配置相应的构建路径。 在搭建好环境后,开发者可以创建一个基于Android平台的PhoneGap项目。这通常涉及以下过程: 1. 创建一个新的...
总结来说,PhoneGap 结合 SQLite 实现离线功能的技术流程主要包括:构建 PhoneGap 环境,通过 AJAX 获取并解析 JSON 数据,使用 PhoneGap 的 SQLite API 存储数据,以及在离线状态下从数据库中读取数据并更新 UI。...
PhoneGap的核心理念是通过Web技术实现多平台的兼容性,将网页应用转换为能够在iOS、Android、Windows Phone等平台上运行的原生应用。这个“最新phonegap插件集合”应该是包含了一系列适用于PhoneGap开发的最新插件,...