在网上看啦一些,自己有修改了一下,主要方法 如下
下载类
package com.example.anrdroidlancher.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
/**
* 下载apk
*
* @author qishoudong
* @2012-10-11
*/
public class LoadingUtile {
public Context context;
public Handler handler;
/**
* 文件一共的大小
*/
public static int fileSize = 0;
/**
* 已经下载的大小
*/
public int downloadSize = 0;
public static int loading_size;
public static final int DOWNLOAD_PREPARE = 0;
public static final int DOWNLOAD_WORK = 1;
public static final int DOWNLOAD_OK = 2;
public static final int DOWNLOAD_ERROR = 3;
public LoadingUtile(Context context) {
this.context = context;
}
public LoadingUtile(Context context, Handler handler) {
this.context = context;
this.handler = handler;
}
public final static String loadingFile = "thtf_apk";
public static String FILEPATH = null;
public File downLoadFile(String httpUrl) throws Exception {
String[] tempStr = httpUrl.split(".");
final String fileName = "ebank.apk";
FileHelper fileHelper = new FileHelper(context);
FILEPATH = fileHelper.sysPath(context) + loadingFile;
File tmpFile = new File(FILEPATH);
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
final File file = new File(FILEPATH + "/" + fileName);
try {
URL url = new URL(httpUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream is = conn.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[256];
conn.connect();
fileSize=conn.getContentLength();
if (fileSize < 1 || is == null) {
sendMessage(DOWNLOAD_ERROR);
} else {
sendMessage(DOWNLOAD_PREPARE);
byte[] bytes = new byte[1024];
int len = -1;
while ((len = is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
downloadSize += len;
loading_size=downloadSize;
sendMessage(DOWNLOAD_WORK);
}
sendMessage(DOWNLOAD_OK);
}
conn.disconnect();
fos.close();
is.close();
} catch (IOException e) {
sendMessage(DOWNLOAD_ERROR);
e.printStackTrace();
}
return file;
}
/**
* 给hand发送消息
*
* @param what
*/
private void sendMessage(int what) {
Message m = new Message();
m.what = what;
handler.sendMessage(m);
}
}
progressDialog handler 事件
/**
* handle
*/
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {// handler接收到消息后就会执行此方法
switch (msg.what) {
case LoadingUtile.DOWNLOAD_ERROR:
progressDialog.setMessage("下载出错");
progressDialog.dismiss();
break;
case LoadingUtile.DOWNLOAD_PREPARE:
// progressDialog.setMax(LoadingUtile.fileSize);
break;
case LoadingUtile.DOWNLOAD_WORK:
int res = LoadingUtile.loading_size * 100 / LoadingUtile.fileSize;
// progressDialog.setMessage("已经下载 "+res+"%");
progressDialog.setProgress(res);
break;
case LoadingUtile.DOWNLOAD_OK:
progressDialog.dismiss();// 关闭ProgressDialog
openFile(file);
break;
default:
progressDialog.dismiss();// 关闭ProgressDialog
break;
}
}
};
分享到:
相关推荐
android 自定义组合progressdialog进度条,方便你的使用............................................................................................
在Android开发中,ProgressDialog是一个非常常见的组件,用于在应用程序执行耗时操作时向用户显示进度。然而,系统默认的ProgressDialog样式可能无法满足所有设计需求,因此开发者常常需要对其进行自定义,以实现更...
在Android开发中,ProgressDialog是一种常见的UI组件,用于在执行耗时操作时向用户显示进度,以提供更好的用户体验。默认的ProgressDialog通常包含一个圆形进度条,但有时为了满足特定的界面设计或功能需求,开发者...
在Android开发中,ProgressBar和ProgressDialog是两种常用的进度条控件,用于展示应用程序执行的后台任务或数据加载状态。本文将详细讲解如何在Android应用中使用这两种控件。 首先,我们来了解一下`ProgressBar`。...
本篇文章将详细讲解如何利用AsynTask和ProgressDialog实现在子线程中下载图片,实时更新进度,并最终显示在ImageView上。 首先,我们需要了解Android的线程模型。主线程,也称为UI线程,负责处理用户界面的所有操作...
在Android开发中,文件复制和进度条的显示是常见的需求,尤其在移动应用中,用户可能需要将数据从一个位置移动到另一个位置,或者在后台下载文件时展示进度。`ProgressDialog`是Android SDK提供的一种对话框组件,...
在Android开发中,ProgressDialog是一种常用的UI组件,用于在执行耗时操作时向用户展示进度或提示信息,如“请稍后……”。为了提供更个性化的用户体验,开发者有时需要自定义ProgressDialog,比如添加滚动条效果。...
在Android开发中,...在"Android 自定义ProgressDialog实例"中,提供的`CustomWaitDialog`可能就是这样一个具体的实现案例,你可以下载并研究其源代码,以获取更多关于自定义ProgressDialog的灵感和技巧。
在Android开发中,ProgressDialog是一个非常常用的组件,它用于在...综上所述,理解并熟练运用ProgressDialog是Android开发中的基本技能,同时也需要关注Android设计指南的变化,以便提供更现代、更友好的用户体验。
如果操作很快完成,或者用户可以同时执行其他任务,那么可能不需要显示ProgressDialog。 通过以上步骤,你就能在Android应用中熟练地使用ProgressDialog了。但随着Android版本的更新,开发者应持续关注最佳实践和新...
通常,这样的示例会展示如何在按钮点击事件中启动一个后台线程,执行耗时操作,并在该操作进行时显示ProgressDialog。例如: ```java Button button = findViewById(R.id.button); button.setOnClickListener(new ...
在Android开发中,Dialog是一种非常重要的组件,它用于在用户界面中显示临时信息或与用户进行交互。系统自带的ProgressDialog通常用于表示一个操作正在进行,但它的样式和功能可能无法满足所有设计需求。为了提供更...
- 在主线程中创建和显示ProgressDialog,因为它涉及到UI操作。 - 避免阻塞主线程,耗时操作应放在子线程中执行。 - 当ProgressDialog不再需要时,记得及时调用`dismiss()`,防止内存泄漏。 通过以上步骤,开发者...
`ProgressDialog`是Android SDK中的一个类,它继承自`AlertDialog`,通常用于显示一个带有进度条的对话框,可以是水平的或旋转的。默认样式可能无法满足所有设计要求,因此自定义成为必然。 要实现自定义`...
接下来,在代码中实例化并显示ProgressDialog: ```java ProgressDialog progressDialog = new ProgressDialog(this, R.style.Theme_AppCompat_Translucent); progressDialog.setContentView(R.layout.progress_...
1. `show()`: 显示ProgressDialog。 2. `dismiss()`: 隐藏或取消ProgressDialog。 3. `incrementProgressBy(int increment)`: 增加进度条的值。 4. `setMessage(CharSequence message)`: 设置进度条下方的文字信息。...
在Android开发中,ProgressDialog是一个非常常见的组件,它用于在执行耗时操作时向用户展示一个对话框,通常显示一个进度条来表示任务的进度。这个组件对于提升用户体验至关重要,因为它可以告知用户应用正在进行...
在Android开发中,ProgressDialog是一个非常常见的组件,它用于在用户执行长时间操作时显示一个带有进度指示的对话框,以提供用户反馈并防止他们误操作。这个"Android ProgressDialog进度条对话框.rar"压缩包可能...