Android 中很多地方都需要用到线程下载。下面我谢了个简单的下载图片的demo。望对你们有到帮助.

首先,配置权限,

在 AndroidManifest.xml里面的application节点下面配置需要用到的权限

权限添加完成,布局如下:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/btn_1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="点击下载图片"

/>

android:id="@+id/tv"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="" />

android:id="@+id/down_pb"

style="?android:attr/progressBarStyleHorizontal"

mce_style="?android:attr/progressBarStyleHorizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:max="100" />

接来下就是写代码了,代码其实很简单,话不多说,我直接上传:

package com.lh.thread;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.URL;

import java.net.URLConnection;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

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 mPb;

TextView mTv;

Button mBtn;

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:

mPb.setMax(fileSize);

case 1:

mPb.setProgress(downLoadFileSize);

int result = downLoadFileSize * 100 / fileSize;

mTv.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);

//初始化控件

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

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

mBtn=(Button) findViewById(R.id.btn_1);

mBtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

//启动线程进行下载

new Thread() {

public void run() {

try {

down_file(

"http://att.bbs.duowan.com/forum/201310/23/151916t9kdya2gia0a21la.jpg",

"/sdcard/");

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

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}.start();

}

});

}

/**

* 此方法描述的是:下载文件并保存

* @param url

* @param path

* @throws IOException void

*/

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

Log.i("AAAAAA", "~~~~~~~~~存储路径是"+path);

// 下载函数

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);

}

}好了,进度条下载就完成了

android 下载进度条代码实现,Android 文件下载进度条的实现相关推荐

  1. java数字时钟代码,Android自定义数字时钟代码,android自定义时钟,package jp.t

    Android自定义数字时钟代码,android自定义时钟,package jp.tpackage jp.tsmsogn.digitalclock;import java.util.Calendar; ...

  2. android自定义侧滑菜单代码,原生Android 侧滑菜单实践(部分)

    此为第一个制作侧滑菜单的实践 . 此部分仅仅为部分实践: 仅缺menu的字符串布局,以及需要修改的MainActivity.java文件,也是需要主要修改的地方. 从使用MD设计-进行侧滑菜单的制作( ...

  3. android 下载apk并自动安装,Android下载apk并自动安装(兼容Android7.0)

    1.开启服务下载新版本 View.OnClickListener checkVersion = new View.OnClickListener () { @Override public void ...

  4. android找回密码界面的代码,《Android项目实战-博学谷》设置密保找回密码

    设置密保&找回密码界面 思路 由于设置密保和找回密码两个界面十分相似,代码逻辑也十分相似,因此这两个界面可以使用同一个布局文件和同一个 Activity 来处理,首先导入所需图片资源文件,再创 ...

  5. android 下载进度条代码实现,Android文件下载进度条的实现代码

    搜索热词 main.xml: android:orientation="vertical" android:layout_width="fill_parent" ...

  6. android studio不能更新代码,解决Android Studio 和 Android SDK Manager 无法在线更新的问题....

    升级时提示 Connection failed. Please check your network connection and try again 修改安装目录下bin\studio.exe.vm ...

  7. android系统自动休眠代码流程,Android P 电源管理(4)待机流程

    电视遥控器,短端走待机(str待机)流程, 长按是关机,走关机流程,记录下待机流程. 参考博客 待机流程 Android P引入自动待机功能,只有存在WakeLock,wakeup_count就不会为 ...

  8. android 进退分屏代码策略,Android的分屏模式开发注意事项

    android7.0 的API开始有了分屏功能,在测试时注意到主页面在分屏模式下,页面所占比例在增大或者减小的时候都会调用oncreat方法,所以查资料总结一下分屏对页面的生命周期的影响以及开发时的注 ...

  9. iphone.android下载,如何在iPhone和Android上删除下载

    每当您从网站下载文件时,它都会保存在您的设备上,直到您将其删除为止. 无论您使用计算机还是智能手机,内部存储都是有限的,您需要删除设备上的下载以释放空间. iPhone,Android,Windows ...

最新文章

  1. C Primer Plus_第8章_字符输入输出和输入确认_编程练习
  2. c++ string 另类写法
  3. LeetCode题组:第1162题-地图分析
  4. 【面试必备】javascript操作DOM元素
  5. struts2 的错误信息: java.net.UnknownHostException: struts.apache.org
  6. LeetCode 1352. 最后 K 个数的乘积
  7. 接口请求json解析问题
  8. layui框架和vue哪个好_小颖的前端框架
  9. html获取手机型号,前端通过js获取手机型号
  10. It技能图谱(13张)
  11. DOS窗口的一些简单介绍
  12. 360浏览器+7654联盟
  13. Halcon算子实现——Texture_Laws
  14. HCIP2------BGP1
  15. 腾讯微博qq说说备份导出工具_10年过去了,腾讯微博终于被判了死刑。。。
  16. StarUML license key
  17. java计算机毕业设计vue基层社区管理服务网MyBatis+系统+LW文档+源码+调试部署
  18. ATM机多账号的实现
  19. 《我们到底应该怎么吃》读书笔记-- 待续
  20. kvm虚拟机静态和动态迁移

热门文章

  1. 主数据管理(MDM)的七个最佳实践
  2. pycharm连接mysql
  3. 【组原】广州大学计算机组成原理考试部分题+复习资料(2020-2021)
  4. golang配置export GOPRIVATE拉取私有库代码
  5. 对不起,Ubuntu 21.04出现了内部错误 解决办法
  6. cordova报错:ANDROID_SDK_ROOT=undefined (recommended setting)
  7. JavaFX快速入门完整代码:点击按钮显示当前系统时间示例
  8. bat批处理启动QQ、微信、企业微信
  9. flink scala shell命令行使用示例
  10. 设置nginx开机启动