zoukankan      html  css  js  c++  java
  • 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>

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

  • 相关阅读:
    Azure Cognitive Service 访问优化
    Azure Managed Disk 共享不灵,EventGrid + LogicApp 来搞
    AZURE ACI -- 无服务器化容器解决方案
    Global Azure 与 China Azure 互联
    小总结
    存储过程及Comm.cs类的创建
    DataGrid1
    根据经纬度和半径计算经纬度范围
    CheckBoxJS选中与反选得到Value
    每天学一点-Jquery判断checkbox是否为选中状态
  • 原文地址:https://www.cnblogs.com/langfei8818/p/6055619.html
Copyright © 2011-2022 走看看