`

android中使用AsyncTask做下载进度条

阅读更多
AsyncTask是个不错的东西,可以使用它来做下载进度条。代码讲解如下:

package com.example.downloadfile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

public class DownloadFile extends Activity {
    
    public static final String LOG_TAG = "test";
    
       private ProgressDialog mProgressDialog;
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
    
    
    File rootDir = Environment.getExternalStorageDirectory();
    
    //定义要下载的文件名
    public String fileName = "test.jpg";
    public String fileURL = "https://lh4.googleusercontent.com/-HiJOyupc-tQ/TgnDx1_HDzI/AAAAAAAAAWo/DEeOtnRimak/s800/DSC04158.JPG";
    
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.main);
        TextView tv = new TextView(this);
        tv.setText("Android Download File With Progress Bar");
    
       //检查下载目录是否存在 
        checkAndCreateDirectory("/mydownloads");
        
        //执行asynctask
        new DownloadFileAsync().execute(fileURL);
    }
  
    
    class DownloadFileAsync extends AsyncTask<String, String, String> {
        
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(DIALOG_DOWNLOAD_PROGRESS);
        }

        
        @Override
        protected String doInBackground(String... aurl) {

            try {
                //连接地址
                URL u = new URL(fileURL);
                HttpURLConnection c = (HttpURLConnection) u.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();
                
                //计算文件长度
                int lenghtOfFile = c.getContentLength();
                
                
                FileOutputStream f = new FileOutputStream(new File(rootDir + "/my_downloads/", fileName));
          
                InputStream in = c.getInputStream();

               //下载的代码
                byte[] buffer = new byte[1024];
                int len1 = 0;
                long total = 0;
                
                while ((len1 = in.read(buffer)) > 0) {
                    total += len1; //total = total + len1
                    publishProgress("" + (int)((total*100)/lenghtOfFile));
                    f.write(buffer, 0, len1);
                }
                f.close();
                
            } catch (Exception e) {
                Log.d(LOG_TAG, e.getMessage());
            }
            
            return null;
        }
        
        protected void onProgressUpdate(String... progress) {
             Log.d(LOG_TAG,progress[0]);
             mProgressDialog.setProgress(Integer.parseInt(progress[0]));
        }

        @Override
        protected void onPostExecute(String unused) {
            //dismiss the dialog after the file was downloaded
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
        }
    }
    
    
    public void checkAndCreateDirectory(String dirName){
        File new_dir = new File( rootDir + dirName );
        if( !new_dir.exists() ){
            new_dir.mkdirs();
        }
    }
    
        @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0
                mProgressDialog = new ProgressDialog(this);
                mProgressDialog.setMessage("Downloading file...");
                mProgressDialog.setIndeterminate(false);
                mProgressDialog.setMax(100);
                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                mProgressDialog.setCancelable(true);
                mProgressDialog.show();
                return mProgressDialog;
            default:
                return null;
        }
    }
}




配置文件

注意打开文件保存权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.downloadfile"
     android:versionCode="1"
     android:versionName="1.0">
     
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     
    <uses-sdk android:minSdkVersion="4" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".DownloadFile"
                 android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>
3
0
分享到:
评论

相关推荐

    Android中使用AsyncTask做下载进度条实例代码

    AsyncTask是个不错的东西,可以使用它来做下载进度条。代码讲解如下: package com.example.downloadfile; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net....

    AsyncTask加载网络图片,实现进度条的更新

    在本示例中,我们将深入探讨如何使用`AsyncTask`来加载网络图片并实时更新进度条。 首先,我们需要理解`AsyncTask`的基本结构。`AsyncTask`有三个泛型参数:`Params`、`Progress`和`Result`。`Params`代表异步任务...

    AsyncTask下载网络图片 进度条提示

    本篇文章将详细探讨如何使用`AsyncTask`来实现网络图片的下载,并且展示进度条提示。 `AsyncTask`有三个泛型参数,分别是Params、Progress和Result。Params表示后台任务接收的输入参数类型,Progress表示后台任务的...

    android中使用AsyncTask实现下载、停止、暂停、继续

    先申明啊,我这个小功能使用的下载地址是使用自己电脑上的Tomacat做的服务器,不会搭建服务器不会看代码的人不要在这里叫不能运行啊 // 给统一列表项的下载、停止、暂停、继续、进度条控件设置相同的Tag btn_...

    android中使用AsyncTask实现下载、暂停,暂存下载进度

    先申明啊,我这个小功能使用的下载地址是使用自己电脑上的Tomacat做的服务器,不会搭建服务器不会看代码的人不要在这里叫不能运行啊 // 给统一列表项的下载、停止、暂停、继续、进度条控件设置相同的Tag btn_start...

    Android-Android仿应用宝下载进度条

    在Android开发中,创建一个与应用宝类似的下载进度条是一个常见的需求,这涉及到自定义View、多线程处理以及UI更新等技术。本项目"Android-Android仿应用宝下载进度条"旨在实现一个类似应用宝App中的下载进度条效果...

    Android进度条AsyncTask

    异步处理进度条 有代码注解~适合初学者~

    Android 多文件下载进度条

    10. **UI设计**:设计一个清晰的界面,展示每个文件的下载状态(如已完成、下载中、等待中)、进度和操作按钮(如暂停、取消、打开)。 综上所述,实现Android多文件下载并显示进度条涉及了网络请求、多线程、文件...

    Android下载进度条案例

    在Android开发中,创建一个下载进度条是提升用户体验的关键元素,它能让用户直观地了解应用程序后台下载或上传任务的进度。下面将详细讲解如何在Android中实现一个下载进度条案例。 首先,我们需要在布局文件(如`...

    android中AsyncTask的用法

    在Android应用开发中,AsyncTask是一个用于在后台线程执行耗时操作并更新UI的工具类,它是Android 1.5版本引入的。AsyncTask的设计初衷是为了简化异步编程,避免直接操作线程和Handler带来的复杂性。下面我们将详细...

    Android 多线程下载+UI进度条刷新

    在Android开发中,多线程下载以及UI进度条的实时刷新是常见的需求,尤其是在处理大文件下载时。本文将深入探讨如何实现这个功能,并参考了链接`http://blog.csdn.net/sky286753213/article/details/11770299`中的...

    AsyncTask与Handler实现进度条的方式

    使用AsyncTask进行进度更新,可以在doInBackground()中调用publishProgress(Progress...)方法,这会触发onProgressUpdate(Progress...)方法在UI线程中执行,从而更新进度条。 **Handler** Handler是一种消息处理...

    Android点击下载时候Button背景变化下载进度条Demo

    【Android点击下载时Button背景变化下载进度条Demo】是一个Android开发中的示例项目,它展示了如何在用户触发下载操作时,使Button的背景发生变化,并同时显示一个下载进度条。这个Demo对于开发者来说,是一个很好的...

    android AsyncTask 断点下载实例

    通过这种方式,我们可以使用Android的AsyncTask实现断点下载功能,确保用户在任何时候都能无缝继续他们的下载。同时,注意AsyncTask仅适用于较短的后台操作,对于长时间运行的任务,考虑使用IntentService或Job...

    Android AsyncTask异步处理下载网页

    1. `onPreExecute()`:这个方法在任务开始执行前运行在主线程中,常用来做一些准备工作,如显示进度条。 2. `doInBackground(Params...)`:这个方法在后台线程中运行,执行实际的耗时操作。在这个方法中,可以进行...

    Android开发之AsyncTask机制及使用细节例子源码

    在Android应用开发中,异步任务(AsyncTask)是一个常用工具,用于在后台线程执行耗时操作,然后在UI线程更新结果,避免阻塞用户界面。AsyncTask的使用和内部机制对于任何Android开发者来说都至关重要。让我们深入...

    Android中使用AsyncTask下载网页图片的代码清单.pdf

    在Android中,直接在主线程进行网络操作会导致应用无响应,因此,`AsyncTask`被广泛用于下载、上传等网络相关的任务。 下面是一个使用`AsyncTask`下载网页图片的详细代码清单: 首先,我们需要导入必要的库,包括...

    AsyncTask 实现进度条

    在Android开发中,当涉及到与用户界面交互的耗时操作,如网络下载、数据库操作等,我们通常会使用异步任务(AsyncTask)来避免主线程阻塞导致的UI无响应问题。`AsyncTask`是Android提供的一个轻量级框架,用于在后台...

    Android中点击下载的进度条

    在Android开发中,实现“点击下载的进度条”功能涉及到几个关键知识点,包括网络请求、文件下载、进度更新以及UI反馈。以下是对这些知识点的详细解释: 1. **网络请求**: 在Android中,我们可以使用多种方式发起...

Global site tag (gtag.js) - Google Analytics