Android文件下载进度条的实现代码

main.xml:

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView  android:id="@+id/tv"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text=""

    />

<ProgressBar android:id="@+id/down_pb"

 android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:max="100"

    style="?android:attr/progressBarStyleHorizontal" mce_style="?android:attr/progressBarStyleHorizontal"

/>

</LinearLayout>

main.java:

复制代码 代码如下:

package com.pocketdigi.download;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.URL;

import java.net.URLConnection;

import org.apache.http.client.ClientProtocolException;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.widget.ProgressBar;

import android.widget.TextView;

import android.widget.Toast;

public class main extends Activity {

    /** Called when the activity is first created. */

 ProgressBar pb;

 TextView tv;

 int   fileSize;

 int   downLoadFileSize;

 String fileEx,fileNa,filename;

 private Handler handler = new Handler()

   {

     @Override

     public void handleMessage(Message msg)

     {//定义一个Handler,用于处理下载线程与UI间通讯

       if (!Thread.currentThread().isInterrupted())

       {

         switch (msg.what)

         {

           case 0:

             pb.setMax(fileSize);

           case 1:

             pb.setProgress(downLoadFileSize);

             int result = downLoadFileSize * 100 / fileSize;

             tv.setText(result + "%");

             break;

           case 2:

             Toast.makeText(main.this, "文件下载完成", 1).show();

             break;

           case -1:

             String error = msg.getData().getString("error");

             Toast.makeText(main.this, error, 1).show();

             break;

         }

       }

       super.handleMessage(msg);

     }

   };

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        pb=(ProgressBar)findViewById(R.id.down_pb);

        tv=(TextView)findViewById(R.id.tv);

        new Thread(){

         public void run(){

          try {

     down_file("http://wallpaper.pocketdigi.com/upload/1/bigImage/1284565196.jpg","/sdcard/");

     //下载文件,参数:第一个URL,第二个存放路径

    } catch (ClientProtocolException e) {

     // TODO Auto-generated catch block

     e.printStackTrace();

    } catch (IOException e) {

     // TODO Auto-generated catch block

     e.printStackTrace();

    }

         }

        }.start();

    }

    public void down_file(String url,String path) throws IOException{

     //下载函数    

     filename=url.substring(url.lastIndexOf("/") + 1);

     //获取文件名

     URL myURL = new URL(url);

     URLConnection conn = myURL.openConnection();

     conn.connect();

     InputStream is = conn.getInputStream();

     this.fileSize = conn.getContentLength();//根据响应获取文件大小

     if (this.fileSize <= 0) throw new RuntimeException("无法获知文件大小 ");

     if (is == null) throw new RuntimeException("stream is null");

     FileOutputStream fos = new FileOutputStream(path+filename);

     //把数据存入路径+文件名

     byte buf[] = new byte[1024];

     downLoadFileSize = 0;

     sendMsg(0);

     do

       {

      //循环读取

         int numread = is.read(buf);

         if (numread == -1)

         {

           break;

         }

         fos.write(buf, 0, numread);

         downLoadFileSize += numread;

         sendMsg(1);//更新进度条

       } while (true);

     sendMsg(2);//通知下载完成

     try

       {

         is.close();

       } catch (Exception ex)

       {

         Log.e("tag", "error: " + ex.getMessage(), ex);

       }

    }

 private void sendMsg(int flag)

 {

     Message msg = new Message();

     msg.what = flag;

     handler.sendMessage(msg);

 } 

}

大家看了以后就应该明白了,上面写的是用一个循环来完成的这些事情,byte buf[] = new byte[1024];这句话中大家一定要写1024,这个可不能改变呀。sendMsg(0);这句的括号里写的是0,这个也要记得,是0而不是1.

时间: 2024-10-27 05:25:58

Android文件下载进度条的实现代码的相关文章

Android文件下载进度条的实现代码_Android

main.xml: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_paren

Android环形进度条(安卓默认形式)实例代码_Android

Android开发中,有很多的功能在实际应用中都起了很大的作用,比如android进度条的实现方式,下面给大家介绍Android环形进度条(安卓默认形式),具体内容如下所示: .xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_widt

Android环形进度条(安卓默认形式)实例代码

Android开发中,有很多的功能在实际应用中都起了很大的作用,比如android进度条的实现方式,下面给大家介绍Android环形进度条(安卓默认形式),具体内容如下所示: .xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_widt

Android ProgressDialog进度条使用详解_Android

进度条以一种客观化的方式,让我们知道程序正在执行的情况,在程序需要时间执行任务的时候,提示进度条友好的告诉用户说,当前任务还没有完成,请稍稍等待,进度条经常使用在APP下载应用.更新应用.加载网络数据中,使用频繁,常见的进度条有ProgressDialog.ProgressBar,这里只要介绍ProgressDialog. ProgressDialog读取文件进度解析主要涉及到一个知识: Handler消息处理机制, 文件字节流的操作, ProgressDialog类的使用 1.Handler消

android自定义进度条渐变圆形_Android

在安全卫生上,经常看到有圆形的进度条在转动,效果非常好看,于是就尝试去实现一下,具体实现过程不多说了,直接上效果图,先炫耀下. 效果图: 分析:比较常见于扫描结果.进度条等场景 利用canvas.drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)绘制圆弧 Paint的一些属性定义粗细.颜色.样式等 LinearGradient实现颜色的线型渐变 同样的道理,可以画出长条进度

自定义Android六边形进度条(附源码)_Android

本文实例讲述了Android自定义圆形进度条,分享给大家供大家参考.具体如下: 大家也可以参考这两篇文章进行学习: <自定义Android圆形进度条(附源码)>   <Android带进度的圆形进度条> 运行效果截图如下: 主要代码: package com.sxc.hexagonprogress; import java.util.Random; import android.content.Context; import android.content.res.ColorSta

线程-android 获取进度条进度值,获取有问题

问题描述 android 获取进度条进度值,获取有问题 android 获取进度条进度值,加断点可以获取到,不加断点就获取不到,,而且加断点是每次跑的值都不一样 这个是代码的一部分,, btn_dignosis.setVisibility(View.GONE); cirProgress.setVisibility(View.VISIBLE); startProgress(); // 加载进度条 currentProgress = cirProgress.getProgress(); new Th

android自定义进度条渐变圆形

在安全卫生上,经常看到有圆形的进度条在转动,效果非常好看,于是就尝试去实现一下,具体实现过程不多说了,直接上效果图,先炫耀下. 效果图: 分析:比较常见于扫描结果.进度条等场景 利用canvas.drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)绘制圆弧 Paint的一些属性定义粗细.颜色.样式等 LinearGradient实现颜色的线型渐变 同样的道理,可以画出长条进度

自定义Android六边形进度条(附源码)

本文实例讲述了Android自定义圆形进度条,分享给大家供大家参考.具体如下: 大家也可以参考这两篇文章进行学习: <自定义Android圆形进度条(附源码)>   <Android带进度的圆形进度条> 运行效果截图如下: 主要代码: package com.sxc.hexagonprogress; import java.util.Random; import android.content.Context; import android.content.res.ColorSta