Android学习笔记--使用HttpURLConnection实现网络下载效果,附带进度条显示

下面我就直接上代码了,因为代码中我已经写了非常详细的注释

  1 package com.wuxianedu.httpdemo;
  2
  3 import android.app.ProgressDialog;
  4 import android.content.Intent;
  5 import android.net.Uri;
  6 import android.os.AsyncTask;
  7 import android.os.Handler;
  8 import android.os.Message;
  9 import android.support.v7.app.AppCompatActivity;
 10 import android.os.Bundle;
 11 import android.view.View;
 12 import android.widget.Button;
 13 import android.widget.Toast;
 14
 15 import org.apache.http.HttpResponse;
 16 import org.apache.http.client.HttpClient;
 17 import org.apache.http.client.methods.HttpGet;
 18 import org.apache.http.impl.client.DefaultHttpClient;
 19
 20 import java.io.FileOutputStream;
 21 import java.io.IOException;
 22 import java.io.InputStream;
 23 import java.io.OutputStream;
 24 import java.net.HttpURLConnection;
 25 import java.net.MalformedURLException;
 26 import java.net.URL;
 27
 28 public class Main2Activity extends AppCompatActivity implements View.OnClickListener{
 29
 30     private Button button;
 31     private ProgressDialog dialog;
 32     private String path;
 33     private Handler handler = new Handler(){
 34         @Override
 35         public void handleMessage(Message msg) {
 36             dialog.setProgress(msg.what);
 37             super.handleMessage(msg);
 38         }
 39     };
 40
 41     @Override
 42     protected void onCreate(Bundle savedInstanceState) {
 43         super.onCreate(savedInstanceState);
 44         setContentView(R.layout.activity_main2);
 45         button = (Button) findViewById(R.id.but_id);
 46         button.setOnClickListener(this);
 47         dialog = new ProgressDialog(this);
 48     }
 49
 50     @Override
 51     public void onClick(View view) {
 52         switch (view.getId()){
 53             case R.id.but_id:
 54                 dialog.setTitle("下载呢");
 55                 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 56                 dialog.show();
 57                 new Thread(new Runnable() {
 58                     @Override
 59                     public void run() {
 60                         getURL();
 61                     }
 62                 }).start();
 63                 break;
 64         }
 65     }
 66
 67     /**
 68      * 启动应用安装。
 69      */
 70     private void setupApk() {
 71         Intent intent = new Intent(Intent.ACTION_VIEW);
 72         //"file://"+文件路径。
 73         Uri uri = Uri.parse("file://"+ path);
 74         intent.setDataAndType(uri, "application/vnd.android.package-archive");
 75         startActivity(intent);
 76     }
 77
 78     private void getURL(){
 79         try {
 80             //构建URL地址
 81             URL url = new URL("http://g.pc6.com/0942666043/apk/4001_ZMJ2016_04_20161028_rnikgd.apk");
 82             try {
 83                 //打开打开打开
 84                 HttpURLConnection hcont = (HttpURLConnection) url.openConnection();
 85                 //建立实际链接
 86                 hcont.connect();
 87                 //获取输入流内容
 88                 InputStream is = hcont.getInputStream();
 89                 //获取文件长度
 90                 int ddddd =hcont.getContentLength();
 91                 //为进度条赋值
 92                 dialog.setMax(ddddd);
 93                 //手机存储地址
 94                 path = getExternalCacheDir().getPath()+"/wuxl.apk";
 95                 //写入文件
 96                 OutputStream os = new FileOutputStream(path);
 97                 int length;
 98                 int lengtsh = 0;
 99                 byte [] bytes = new byte[1024];
100                 while ((length = is.read(bytes))!= -1){
101                     os.write(bytes,0,length);
102                     //获取当前进度值
103                     lengtsh+=length;
104                     //把值传给handler
105                     handler.sendEmptyMessage(lengtsh);
106                 }
107                 //关闭流
108                 is.close();
109                 os.close();
110                 os.flush();
111                 dialog.dismiss();
112                 runOnUiThread(new Runnable() {
113                     @Override
114                     public void run() {
115                         Toast.makeText(Main2Activity.this, "下载成功了", Toast.LENGTH_SHORT).show();
116                     }
117                 });
118             } catch (IOException e) {
119                 e.printStackTrace();
120             }
121
122         } catch (MalformedURLException e) {
123             e.printStackTrace();
124         }
125     }
126 }

下面是布局文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6
 7     tools:context="com.wuxianedu.httpdemo.Main2Activity">
 8
 9     <Button android:id="@+id/but_id" android:text="下载APP"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content" />
12 </RelativeLayout>

很简单,大家在使用的时候别忘记加网络权限哈

时间: 2024-10-10 07:50:43

Android学习笔记--使用HttpURLConnection实现网络下载效果,附带进度条显示的相关文章

Android学习笔记--使用Apache HttpClient实现网络下载效果,附带进度条显示

今天学习 了Apache 写了一个网络下载的效果,代码如下,代码中我已经写了很详细的注释了,相信大家都能看懂 1 http://m.blog.csdn.net/article/details?id=52927536 2 3 4 package com.wuxianedu.httpdemo; 5 6 import android.app.ProgressDialog; 7 import android.content.Intent; 8 import android.net.Uri; 9 impo

Android学习笔记(四六):互联网通信-文件下载

在Android 2.3引入了DownloadManager可以处理复杂的文件下载,包括检查用户是否有数据联系(WIFI或者移动数据),当用户从一个有数据连接的地方移动到无连接的地方(例如离开了wifi或者3G data的access point),确保设备在下载过程中保持awake状态.DownloadManager可以处理HTTP URLs,但是不能处理HTTPS(SSL) URLs. 设置下载文件条件许可 在这个例子,将学习通过DownloadManager从Internet下载文件,并存

Android学习笔记二

17. 在ContentProvider中定义的getType()方法是定义URI的内容类型. 18. SQLiteDatabase类中的insert/delete/update/query方法其实也挺好用的,我在EquipmentProvider类中做了实现 19. Android专门有个单元测试项目(Android Test Project),在这个项目中,可以新建一个继承AndroidTestCase类的具体测试类来单元测试某个功能.我新建了一个AndroidTestProject项目,在

【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用service提供很多功能,例如利用Google Maps API,现在我们将聚焦在HTTP serice中. Android SDK提供HttpClient,和J2EE中的接口非常相似.最常用的就是HTTP GET和HTTP POST.相关内容也可以阅读Android学习笔记(四五):互联网通信-Htt

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供.我们将相关信息存储在一个intent中,例如该文本的Uri.这个intent可以匹配系统的多个应用,替代菜单将这些应用一一列出,菜单项的title就是该可被调用的activity的名字,图标也为该可被调用的activity的图表. 小例子说明 我们通过一个小例子进行学习,简单地打开一个URL:we

Android学习笔记(十五)——碎片的生命周期(附源码)

碎片的生命周期 点击下载源码 与活动类似,碎片具有自己的生命周期.理解了碎片的生命周期后,我们可以在碎片被销毁时正确地保存其实例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Fragments,在Fragment1.java文件中添加如下代码: package net.zenail.Fragments; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragm

Pro Android学习笔记(十二):了解Intent(下)

解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键就是component 名字,在<intent-fliter>中声明的其他属性被忽略.对于implicit intent,则根据action,category和data来进行匹配.然而一个intent fliter中可以声明多个actions,多个categories,多个data属性,因此可以满

Pro Android学习笔记(十):了解Intent(上)

Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Service(后台代码) 3.Broadcast receiver(处理广播消息的代码) 4.Content provider(抽象数据的代码) Intent基本含义 intent是通知平台处理(唤起)的动作.Android唤起的动作将取决于注册了什么动作.例如我们有个简单的Activity:IntentBaiscViewActivity.在AndroidManife

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri