Android更新下载进度条
2013-07-23 16:39
302 查看
下载文件会阻塞UI主线程,所以需要new一个新线程来执行下载操作,通过handler执行更新UI进度条操作。代码如下:
[java]
view plaincopyprint?
public class AndroidTest
extends Activity {
private static
final String TAG = "AndroidTest";
private ProgressBar progressBar =
null;
private Button startButton =
null;
private EditText filenameText =
null;
private MyHandler handler =
null;
private Message message =
null;
private boolean flag =
true;
private int size =
1;
private int hasRead =
0;
private int len =
0;
private byte buffer[] =
new byte[1024*4];
private int index =
0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);
startButton = (Button)findViewById(R.id.mybutton);
startButton.setOnClickListener(new ButtonClick());
filenameText = (EditText)findViewById(R.id.fileNameID);
handler = new MyHandler();
}
public boolean downloadFile(final String urlStr,
final String filename) {
new Thread(new Runnable(){
public void run() {
try {
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
size = connection.getContentLength();
InputStream inputStream = connection.getInputStream();
OutputStream outputStream = new FileOutputStream(Environment.getExternalStorageDirectory()+"/"+filename);
while((len=inputStream.read(buffer))!=-1){
outputStream.write(buffer);
hasRead+=len;
index = (int)(hasRead*100)/size;
message = new Message();
message.what =
1;
handler.sendMessage(message);
Log.d(TAG, "index = " + index);
System.out.println("has = "+hasRead+" size = "+size+" index = "+index);
}
inputStream.close();
outputStream.close();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
}
}).start();
return flag;
}
class ButtonClick
implements OnClickListener {
public void onClick(View v) {
String url = filenameText.getText().toString();
String filename = url.substring(url.lastIndexOf('/') +
1);
Log.d(TAG, "url = " + url);
Log.d(TAG, "filename = " + filename);
if(!downloadFile(url, filename)) {
String rs = "下载失败 ";
Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();
}
}
}
class MyHandler
extends Handler{
@Override
public void handleMessage(Message msg) {
if (msg.what ==
1) {
progressBar.setProgress(index);
Log.d(TAG, "setProgress index:" + index);
if (index >=
99) {
String rs = "下载完成";
Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();
}
}
super.handleMessage(msg);
}
}
}
[java]
view plaincopyprint?
public class AndroidTest
extends Activity {
private static
final String TAG = "AndroidTest";
private ProgressBar progressBar =
null;
private Button startButton =
null;
private EditText filenameText =
null;
private MyHandler handler =
null;
private Message message =
null;
private boolean flag =
true;
private int size =
1;
private int hasRead =
0;
private int len =
0;
private byte buffer[] =
new byte[1024*4];
private int index =
0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);
startButton = (Button)findViewById(R.id.mybutton);
startButton.setOnClickListener(new ButtonClick());
filenameText = (EditText)findViewById(R.id.fileNameID);
handler = new MyHandler();
}
public boolean downloadFile(final String urlStr,
final String filename) {
new Thread(new Runnable(){
public void run() {
try {
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
size = connection.getContentLength();
InputStream inputStream = connection.getInputStream();
OutputStream outputStream = new FileOutputStream(Environment.getExternalStorageDirectory()+"/"+filename);
while((len=inputStream.read(buffer))!=-1){
outputStream.write(buffer);
hasRead+=len;
index = (int)(hasRead*100)/size;
message = new Message();
message.what =
1;
handler.sendMessage(message);
Log.d(TAG, "index = " + index);
System.out.println("has = "+hasRead+" size = "+size+" index = "+index);
}
inputStream.close();
outputStream.close();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
}
}).start();
return flag;
}
class ButtonClick
implements OnClickListener {
public void onClick(View v) {
String url = filenameText.getText().toString();
String filename = url.substring(url.lastIndexOf('/') +
1);
Log.d(TAG, "url = " + url);
Log.d(TAG, "filename = " + filename);
if(!downloadFile(url, filename)) {
String rs = "下载失败 ";
Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();
}
}
}
class MyHandler
extends Handler{
@Override
public void handleMessage(Message msg) {
if (msg.what ==
1) {
progressBar.setProgress(index);
Log.d(TAG, "setProgress index:" + index);
if (index >=
99) {
String rs = "下载完成";
Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();
}
}
super.handleMessage(msg);
}
}
}
相关文章推荐
- Android 通过蒲公英pgyer的接口 Service 实现带进度下载App 通知栏显示 在线更新 自动更新Demo
- Android中使用AsyncTask实现文件下载以及进度更新提示
- android AsyncTask异步下载并更新进度条
- android之apk自动更新采用Notification通知提示并显示下载进度
- android AsyncTask异步下载并更新进度条
- android之apk自动更新采用Notification通知提示并显示下载进度
- android中DownloadManager实现版本更新,监听下载进度实例
- Android多任务下载,使用Notification更新进度条
- Android 自动更新之状态栏下载状态和进度
- Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!
- Android中使用AsyncTask实现下载文件动态更新进度条功能
- Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!
- Android 通过蒲公英pgyer的接口 Service 实现带进度下载App 通知栏显示 在线更新 自动更新Demo
- Android中使用AsyncTask实现文件下载以及进度更新提示
- android通过service实现更新并显示下载进度条,最后自动安装实例
- Android okhttp 下载文件到指定文件夹带进度更新加7.0适配
- Android关于后台下载前台通知更新进度条的问题
- android 应用内版本更新,带下载进度条
- Android提示版本更新(如何计算下载进度核心思路)
- Android 自动更新之状态栏下载状态和进度