Android开发 下载显示进度
来源:互联网 发布:一次性洗脸巾危害 知乎 编辑:程序博客网 时间:2024/06/05 01:13
package cn.com.hyronjs.activity;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private ProgressBar progressBar;
private TextView textView;
private Button start;
private int fileSize;
private int downloadFileSize;
private String filename;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 定义一个Handler,用于处理下载线程与UI间通讯
if (!Thread.currentThread().isInterrupted()) {
switch (msg.what) {
case 0:
progressBar.setMax(fileSize);
case 1:
progressBar.setProgress(downloadFileSize);
int result = downloadFileSize * 100 / fileSize;
textView.setText(result + "%");
break;
case 2:
Toast.makeText(MainActivity.this, "文件下载完成", 1).show();
break;
}
}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.begin);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
down();
}
});
}
private void down(){
final String uri = this.getResources().getString(R.string.uri);
final String sd = this.getResources().getString(R.string.sd);
progressBar = (ProgressBar) findViewById(R.id.progressbar);
textView = (TextView) findViewById(R.id.textview);
new Thread() {
public void run() {
try {
// 下载文件,参数:第一个URL,第二个存放路径
downFile(uri, sd);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public void downFile(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(" unknow file size ");
if (is == null)
throw new RuntimeException(" inputstream is null ");
FileOutputStream fos = new FileOutputStream(path + filename);
// 把数据存入路径+文件名
byte buf[] = new byte[1024];
downloadFileSize = 0;
sendData(0);
do {
// 循环读取
int numread = is.read(buf);
if (numread == -1) {
break;
}
fos.write(buf, 0, numread);
downloadFileSize += numread;
sendData(1);// 更新进度条
} while (true);
sendData(2);// 通知下载完成
if(is != null){
is.close();
}
if(fos != null){
fos.close();
}
}
private void sendData(int flag) {
Message msg = new Message();
msg.what = flag;
handler.sendMessage(msg);
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private ProgressBar progressBar;
private TextView textView;
private Button start;
private int fileSize;
private int downloadFileSize;
private String filename;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 定义一个Handler,用于处理下载线程与UI间通讯
if (!Thread.currentThread().isInterrupted()) {
switch (msg.what) {
case 0:
progressBar.setMax(fileSize);
case 1:
progressBar.setProgress(downloadFileSize);
int result = downloadFileSize * 100 / fileSize;
textView.setText(result + "%");
break;
case 2:
Toast.makeText(MainActivity.this, "文件下载完成", 1).show();
break;
}
}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.begin);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
down();
}
});
}
private void down(){
final String uri = this.getResources().getString(R.string.uri);
final String sd = this.getResources().getString(R.string.sd);
progressBar = (ProgressBar) findViewById(R.id.progressbar);
textView = (TextView) findViewById(R.id.textview);
new Thread() {
public void run() {
try {
// 下载文件,参数:第一个URL,第二个存放路径
downFile(uri, sd);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public void downFile(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(" unknow file size ");
if (is == null)
throw new RuntimeException(" inputstream is null ");
FileOutputStream fos = new FileOutputStream(path + filename);
// 把数据存入路径+文件名
byte buf[] = new byte[1024];
downloadFileSize = 0;
sendData(0);
do {
// 循环读取
int numread = is.read(buf);
if (numread == -1) {
break;
}
fos.write(buf, 0, numread);
downloadFileSize += numread;
sendData(1);// 更新进度条
} while (true);
sendData(2);// 通知下载完成
if(is != null){
is.close();
}
if(fos != null){
fos.close();
}
}
private void sendData(int flag) {
Message msg = new Message();
msg.what = flag;
handler.sendMessage(msg);
}
}
- Android开发 下载显示进度
- Android开发 下载显示进度
- Android okhttputils显示下载进度
- Android开发之文件下载,状态时显示下载进度,点击自动安装
- Android开发之文件下载,状态时显示下载进度,点击自动安装
- android 多线程下载 显示进度 速度
- android 多线程下载 显示进度 速度
- android AsyncTask下载文件并且显示进度
- android 多线程下载 显示进度 速度
- android 通知栏显示下载进度
- android开发教程教您用于下载文件和显示现在进度的线程类
- 【Android 开发教程】显示进度对话框
- Android开发之seekbar动态显示进度
- Android DownloadManager下载文件,实时显示下载进度
- android文件下载及自定义通知显示下载进度
- 用android下载一个文件,在ProgressDialog显示下载进度
- android文件下载及自定义通知显示下载进度
- Android实现Service下载文件,Notification显示下载进度
- 马士兵J2SE-第五章-数组
- 假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等
- 生产者消费者模型-python-多进程
- 百度笔试题系列之一-2011年9月24日百度笔试RD-1
- ExtJS之Ext.Ajax.request用法详解
- Android开发 下载显示进度
- (14)使用查询表达式的LINQ
- u突然放毒药
- Ubuntu下的deb包制作详解
- [C]calloc() 和malloc() 有什么区别?
- Eclipse安装插件长时间停留在calculating requirements and dependencies
- 就回来了
- SQL SERVER DBA 三十問
- ClistCtrl::SortItems()的使用