Android 下载文件并显示进度条

OK,上一篇文章讲了上传文件到服务端,并显示进度条

那么这边文章主要讲下载文件并显示进度条。

由于简单,所以只上传代码.还是需要用到HttpURLConnection 类,当然你也需要定义一个handle 去接收完成或失败的消息

首先先定义变量

 private ProgressBar mPgBar;

 private boolean interceptFlag = false;

然后开始编写一个Task 类 去实现下载功能。

class DownloadTask extends  AsyncTask<Object,Integer,Void>{
        private String savePath;

        private String uri;

        public DownloadTask(String savePath,String uri){
            this.savePath = savePath;

            this.uri = uri;
        }

        @Override
        protected Void doInBackground(Object... objects) {
            String saveFileName ="download."+uri.substring(uri.lastIndexOf(".")-1,uri.length());
            try {
                URL url = new URL(uri);

                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                conn.connect();
                int length = conn.getContentLength();
                InputStream is = conn.getInputStream();
                //判断是否挂载了SD卡
                String storageState = Environment.getExternalStorageState();
                if(storageState.equals(Environment.MEDIA_MOUNTED)){
                    File file = new File(savePath);
                    if(!file.exists()){
                        file.mkdirs();
                    }
                    saveFileName = savePath + saveFileName;
                }

                File file = new File(savePath);
                if(!file.exists()){
                    file.mkdirs();
                }
                File mDownloadFile = new File(saveFileName);
                FileOutputStream fos = new FileOutputStream(mDownloadFile);

                int count = 0;
                byte buf[] = new byte[1024];

                do{
                    int numread = is.read(buf);
                    count += numread;
                    publishProgress((int)(((float)count / length) * 100));
                    //更新进度
                    mHandler.sendEmptyMessage(DOWN_UPDATE);
                    if(numread <= 0){
                        //下载完成通知安装
                        mHandler.sendEmptyMessage(DOWN_OVER);
                        break;
                    }
                    fos.write(buf,0,numread);
                }while(!interceptFlag);//点击取消就停止下载.

                fos.close();
                is.close();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch(IOException e){
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onProgressUpdate(Integer... progress) {
            mPgBar.setProgress(progress[0]);
        }
    }

那么到这里就完成下载的功能了。


小伙伴可以尝试下载看看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值