• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android文件下载之进度检测,android文件下载

Android文件下载之进度检测,android文件下载

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 上传文件进度,android 自定义进度条,android 进度条,android 圆形进度条,android进度条样式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android文件下载之进度检测,android文件下载


  近期因为项目的需要,研究了一下Android文件下载进度显示的功能实现,接下来就和大家一起分享学习一下,希望对广大初学者有帮助。
  先上效果图:

  

  上方的蓝色进度条,会根据文件下载量的百分比进行加载,中部的文本控件用来现在文件下载的百分比,最下方的ImageView用来展示下载好的文件,项目的目的就是动态向用户展示文件的下载量。

  下面看代码实现:首先是布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <ProgressBar
        android:id="@+id/progressBar"
       >public class MainActivity extends Activity {

	ProgressBar pb;   
	TextView tv; 
	ImageView imageView;
    int fileSize;    
    int downLoadFileSize;    
    String fileEx,fileNa,filename;  
    //用来接收线程发送来的文件下载量,进行UI界面的更新
    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(MainActivity.this, "文件下载完成", Toast.LENGTH_SHORT).show();   
                FileInputStream fis = null;
				try {
					fis = new FileInputStream(Environment.getExternalStorageDirectory() + File.separator + "/ceshi/" + filename);
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
                Bitmap bitmap = BitmapFactory.decodeStream(fis);  ///把流转化为Bitmap图
                imageView.setImageBitmap(bitmap);
                break;    
     
              case -1:    
                String error = msg.getData().getString("error");
                Toast.makeText(MainActivity.this, error, Toast.LENGTH_SHORT).show();    
                break;    
            }    
          }    
          super.handleMessage(msg);    
        }    
      };
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		pb=(ProgressBar)findViewById(R.id.progressBar);
        tv=(TextView)findViewById(R.id.textView);
        imageView = (ImageView) findViewById(R.id.imageView);
        tv.setText("0%");
        new Thread(){
            public void run(){
                try {
                	//下载文件,参数:第一个URL,第二个存放路径
                	down_file("http://cdnq.duitang.com/uploads/item/201406/15/20140615203435_ABQMa.jpeg", Environment.getExternalStorageDirectory() + File.separator + "/ceshi/");
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }   
            }    
        }.start();    
     
    }    
	
	/**
	 * 文件下载
	 * @param url:文件的下载地址
	 * @param path:文件保存到本地的地址
	 * @throws IOException
	 */
    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"); 
        File file1 = new File(path);
        File file2 = new File(path+filename);
        if(!file1.exists()){
        	file1.mkdirs();
        }
        if(!file2.exists()){
        	file2.createNewFile();
        }
        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);    
        }    
     
    }    
    
    //在线程中向Handler发送文件的下载量,进行UI界面的更新
    private void sendMsg(int flag)    
    {    
        Message msg = new Message();    
        msg.what = flag;    
        handler.sendMessage(msg);    
    }        
     
}

  最后一定要注意的是:在AndroidManifest.xml文件中,添加访问网络的权限

<uses-permission android:name="android.permission.INTERNET"/>

  到这里关于Android文件下载动态显示下载进度的小demo就为大家分享完毕,希望对大家的学习有所帮助。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android文件下载之进度检测,android文件下载

相关文章

  • 2018-01-28android SwipeRefresh下拉刷新
  • 2017-05-26提升Android ListView性能的几个技巧
  • 2017-05-26Android开发学习——应用安装过程,android开发
  • 2017-05-26Android蓝牙技术Bluetooth使用流程(详解)
  • 2017-05-26mysql core文件的正确打开姿势
  • 2017-05-26android源码解析之(十一)--)应用进程启动流程
  • 2017-05-227.5.1 WebView(网页视图)基本用法
  • 2017-05-26【Android开发】完美解决Android完全退出程序,开发android
  • 2017-05-26Android之Dedug--Circular dependencies cannot exist in AnimatorSet,circular
  • 2017-05-26[Android]动态加载/热部署框架汇总,android框架

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android学习笔记-EditText(输入框)(一),android-edittext
    • 上传图像之裁剪,图像裁剪
    • 53.Android Canvas Paint相关内容介绍
    • Android之网络数据存储,android数据存储
    • 3.6 响应系统设置的事件(Configuration类)
    • Android--Dialog对话框
    • PendingIntent 显示通知,pendingintent通知
    • Android系统默认对话框添加图片,
    • debian8下apache2.4.x部署mysql认证的subversion
    • 新闻客户端应用项目源码,客户端项目源码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有