下載文件會阻塞UI主線程,所以需要new一個新線程來執行下載操作,通過handler執行更新UI進度條操作。代碼如下:

public class AndroidTest extends Activity {

private static final String TAG = "AndroidTest";

private ProgressBar progressBar = null;

private Button startButton = null;

private EditText filenameText = null;

private MyHandler handler = null;

private Message message = null;

private boolean flag = true;

private int size = 1;

private int hasRead = 0;

private int len = 0;

private byte buffer[] = new byte[1024*4];

private int index = 0;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);

startButton = (Button)findViewById(R.id.mybutton);

startButton.setOnClickListener(new ButtonClick());

filenameText = (EditText)findViewById(R.id.fileNameID);

handler = new MyHandler();

}

public boolean downloadFile(final String urlStr, final String filename) {

new Thread(new Runnable(){

public void run() {

try {

URL url = new URL(urlStr);

HttpURLConnection connection = (HttpURLConnection)url.openConnection();

size = connection.getContentLength();

InputStream inputStream = connection.getInputStream();

OutputStream outputStream = new FileOutputStream(Environment.getExternalStorageDirectory()+"/"+filename);

while((len=inputStream.read(buffer))!=-1){

outputStream.write(buffer);

hasRead+=len;

index = (int)(hasRead*100)/size;

message = new Message();

message.what = 1;

handler.sendMessage(message);

Log.d(TAG, "index = " + index);

System.out.println("has = "+hasRead+" size = "+size+" index = "+index);

}

inputStream.close();

outputStream.close();

} catch (Exception e) {

flag = false;

e.printStackTrace();

}

}

}).start();

return flag;

}

class ButtonClick implements OnClickListener {

public void onClick(View v) {

String url = filenameText.getText().toString();

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

Log.d(TAG, "url = " + url);

Log.d(TAG, "filename = " + filename);

if(!downloadFile(url, filename)) {

String rs = "下載失敗 ";

Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();

}

}

}

class MyHandler extends Handler{

@Override

public void handleMessage(Message msg) {

if (msg.what == 1) {

progressBar.setProgress(index);

Log.d(TAG, "setProgress index:" + index);

if (index >= 99) {

String rs = "下載完成";

Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();

}

}

super.handleMessage(msg);

}

}

}

android 進度條_Android更新下載進度條 | 學步園相关推荐

  1. php中mysql_affected_rows()更新记录返回0_php中mysql_affected_rows()返回-1帶來的“陷阱” | 學步園...

    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die('Could not con ...

  2. android 5.1 flash,Flash Player for Android 4.0 and 5.1 以上版本(提供下載)

    城哥說: Flash Player for Android 4.0 and 4.3 arc... 恕刪 Android 2.3版 進入手機"設置"->"應用程式&q ...

  3. nds文件解包_下載wwpacker 1.84 更新 給wad解包和封包的工具

    警告: 使用這篇文章提及的方法及工具有一定風險, 最壞情況有可能令你的Wii變全磚. 如有任何損失, 本人概不負責. 如你不清楚那些工具的用途及用法, 請不要隨便使用或修改.[ 所需工具 ] wwpa ...

  4. Unity 5.4公開測試,免費用戶也能下載使用!

    作者:ALEX LIAN  原文連結 為開發者提供可靠穩定的產品是我們一貫的使命,現在我們想提供Unity 5.4 beta版本給所有的開發者測試,包含了Unity Personal Edition版 ...

  5. linux下ant编译android,linux(以ubuntu為例)下Android利用ant自動編譯、修改配置文件、批量多渠道,打包生成apk文件...

    原創,轉載請注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html 安裝前所需要准備的軟件: 1. JDK(jdk-7-linux-i586.tar.gz) ...

  6. Android面试总结(持续更新修改)

    ###Android面试总结(持续更新修改) 1.Android 的四大组件是哪些,它们的作用? ①Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为 ...

  7. Android开源项目集合(不断更新)

    Android开源项目集合(不断更新) 女神节快乐~~~ 休息片刻23 PlayAndroid advanced-java FFmpegAndroidCameraEncoder ScaleRuler ...

  8. Fontface Ninja 一鍵查看網頁使用的字型名稱、大小和行高,快速下載字體檔案

    對於網頁設計有興趣的朋友,一定很習慣在上網時注意網頁所使用的字型,若是比較有經驗的使用者會透過找網頁原始碼的方式來查看網頁使用的字型,或是從 CSS 檔裡去挖掘該網站使用的是那一種字型組合.先前我曾介 ...

  9. 搞定-臺服巫妖王之怒的注冊機下載-OK

    想臺服的巫妖王之怒,今天搞定了,分享給大家. 轉臺服太必要了,更貼切原版,速度非常快(比9c快),只是價格是國服的2倍. 具體步驟如下: 1.到臺服注冊用戶名和密碼:  http://www.wowt ...

最新文章

  1. Linux命令学习记录(六)
  2. 利用ViewPager+Fragment+actionbar实现可左右滑动的Action Tab
  3. hdu 4923 Room and Moor (单调栈+思维)
  4. 内存体系 用共享段于进程间联系
  5. 使用Dropwizard度量标准监视和测量无功应用
  6. 使用std::function 把类成员函数指针转换为普通函数指针
  7. 【LeetCode 剑指offer刷题】字符串题3:Reverse String
  8. CCPC-Wannafly Winter Camp Day1 (Div2, onsite)【流流流动】
  9. 看完这篇 Linux 的基本操作你就会了!
  10. 陶哲轩实分析 习题6.6.5
  11. 心理正常与异常的区分_判断心理正常异常三原则
  12. python开发录屏软件_Python移动端录屏库
  13. 聊聊一周的启发,关于读书和职场
  14. 知人者智,自知者明。 胜人者有力,自胜者强。 知足者富。 强行者有志。 不失其所者久。 死而不亡者寿。
  15. html+css:自定义鼠标指针图案
  16. 最新的Vivado安装、使用教程(2022/12/31)
  17. Android蓝牙开发之一:打开、关闭蓝牙
  18. 图像的 matlab代码,常用的一些图像处理Matlab源代码
  19. 家用路由器反接故障案例分享
  20. 硅谷互联网巨头们对区块链PlusFo超级链感兴趣?原因何在!

热门文章

  1. 网易云信携手武汉三好教育,共筑教育援疆的「云桥梁」
  2. 技术干货 | C++20 四大特性之一:Module 特性详解
  3. 你将被重新带回到 那个燃烧彼此的世界
  4. Rancher 2.0 里程碑版本:支持添加自定义节点!
  5. Raspberry Pi 2 Model B Pi4J 示例
  6. Win7 如何访问XP系统里的网上邻居?
  7. 整理就知识,你会在里面发现新的东西
  8. 程序员的职业素养-读书笔记
  9. linux 管道和重定向
  10. HDU 4339 Query