文件下载
2013-07-02 13:40
183 查看
传统的文件下载
先来说一种简单地、传统的方式,即采用流的方式下载文件,步骤如下:
建一个HttpURLConnection的对象,可以通过URL对象的openConnection()方法获取,例如:HttpURLConnection urlConn = (HttpURLConnection)url.openconnection();
获取一个InputStream对象:urlConn.getInputStream()。有了InputStream,剩下的都是Java的标准I/O操作。
示例代码如下:
记得在Androidmanifest.xml添加以下权限(网络权限/SD卡读写权限)
使用DownloadManager管理下载
在Android 2.3引入了DownloadManager可以处理复杂的文件下载,包括检查用户是否有数据联系(WIFI或者移动数据),当用户从一个有数据连接的地方移动到无连接的地方(例如离开了wifi或者3G data的access point),确保设备在下载过程中保持awake状态。DownloadManager可以处理HTTP URLs,但是不能处理HTTPS(SSL) URLs。注意,由于不支持2.3之前的版本,因此该功能只能在2.3或者更高版本的API上使用。
第一步,不要忘记在Androidmanifest.xml中添加权限:
注意,对于任何的Internet访问都不建议在主线程中进行。否则会导致5秒卡死(Android程序若主程序在五秒钟内仍没有响应,就会被认为是卡死,请求退出)。
以上部分内容转载或参考来源如下:
http://blog.csdn.net/flowingflying/article/details/6925683
在此表示感谢。
转载请注明来源,版权归原作者所有,未经同意严禁用于任何商业用途。
微博:http://weibo.com/theworldsong
邮箱:theworldsong@foxmail.com
先来说一种简单地、传统的方式,即采用流的方式下载文件,步骤如下:
建一个HttpURLConnection的对象,可以通过URL对象的openConnection()方法获取,例如:HttpURLConnection urlConn = (HttpURLConnection)url.openconnection();
获取一个InputStream对象:urlConn.getInputStream()。有了InputStream,剩下的都是Java的标准I/O操作。
示例代码如下:
int data = 0; //目标文件地址为SD卡根目录,文件名为baidu.jpg File file = new File(Environment.getExternalStorageDirectory(),"baidu.jpg"); //输出流地址 FileOutputStream fos = new FileOutputStream(file); URL url = new URL("http://www.baidu.com/img/bdlogo.gif"); //开始请求 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); //状态码。一般检测是否为200,如果是则继续。此处省略代码。 Log.i("code",""+urlConn.getResponseCode()); //获取输入流 InputStream is = urlConn.getInputStream(); //一个字节一个字节地写入,如果读取完毕,返回-1,while终止 while( (data=is.read())!=-1 ){ fos.write(data); } fos.flush(); fos.close();
记得在Androidmanifest.xml添加以下权限(网络权限/SD卡读写权限)
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application> .... </application>
使用DownloadManager管理下载
在Android 2.3引入了DownloadManager可以处理复杂的文件下载,包括检查用户是否有数据联系(WIFI或者移动数据),当用户从一个有数据连接的地方移动到无连接的地方(例如离开了wifi或者3G data的access point),确保设备在下载过程中保持awake状态。DownloadManager可以处理HTTP URLs,但是不能处理HTTPS(SSL) URLs。注意,由于不支持2.3之前的版本,因此该功能只能在2.3或者更高版本的API上使用。
第一步,不要忘记在Androidmanifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application> .... </application>java源码如下,所有解释均在注释中体现:
long lastDownloadId = 0; // 步骤1 : 获取系统服务,并指明是下载服务,即DownloadManager。 DownloadManager mgr = (DownloadManager)getSystemService(DOWNLOAD_SERVICE); //注意,这个Uri是android.net.Uri,而不是java.net.URI Uri uri = Uri.parse("http://www.baidu.com/img/bdlogo.gif"); //步骤2: 通过向下载服务发出enqueue()的请求,将放在下载队列中,通常会触发立即下载,并返回下载的ID号 //根据这个号,可以查询相关的下载情况。分别设置请求的Uri,允许的数据访问方式,是否允许漫游,本地存储的位置,以及为这个下载设置title和描述信息。 lastDownloadId = mgr.enqueue(new DownloadManager.Request(uri) //可在移动网络和WIFI情况下下载。注意使用的是位运算符 .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI) //缺省是true,true的情况下若是漫游也同样下载 .setAllowedOverRoaming(false) //下载任务的标题 .setTitle("MyTest") //下载任务的小标题 .setDescription("Something Useful") //第一个参数为路径,默认路径"/"即为SD卡根目录;第二个参数为目标文件名 .setDestinationInExternalPublicDir("/", "baidu111.gif"));
注意,对于任何的Internet访问都不建议在主线程中进行。否则会导致5秒卡死(Android程序若主程序在五秒钟内仍没有响应,就会被认为是卡死,请求退出)。
以上部分内容转载或参考来源如下:
http://blog.csdn.net/flowingflying/article/details/6925683
在此表示感谢。
转载请注明来源,版权归原作者所有,未经同意严禁用于任何商业用途。
微博:http://weibo.com/theworldsong
邮箱:theworldsong@foxmail.com
相关文章推荐
- DownloadManager 互联网通信-文件下载
- Linux使用scp命令进行文件远程的上传或下载
- Struts2之文件下载
- iOS开发之实现文件上传下载
- 用Visual C#实现文件下载
- 从数据库中下载文件的工具
- .NET下的FTP上传、下载文件操作类[收藏]
- Asp.net 实现选择文件批量下载
- CSDN免积分下载地址获取器单文件
- java 两个通过java代码操作FTP的类,上传下载删除,获取文件
- 转:delphi 实现文件上传下载
- 使用PHP实现下载CSS文件中的图片
- retrofit 实现文件上传和下载
- Android 实现应用下载并在通知栏展示进度通知 打开APK文件
- 20171030_chr_download 文件下载改进版
- Linux远程服务器文件上传与下载
- 【转】html中用href 实现文件下载
- 防止用户直接输入地址下载资源文件(java实现)
- 下载文件