package com.icss;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.icss.entity.LoadInfo;
import com.icss.service.Downloader;
public class MainActivity extends ListActivity {
// 固定下载的资源路径,这里可以设置网络上的地址
private static final String URL = "http://10.20.30.175/zentao/test_dir/";
// 固定存放下载的音乐的路径:SD卡目录下
private static final String SD_PATH = "/mnt/sdcard/";
// 存放各个下载器
private Map<String, Downloader> downloaders = new HashMap<String, Downloader>();
// 存放与下载器对应的进度条
private Map<String, ProgressBar> progressBars = new HashMap<String, ProgressBar>();
/**
* 31 * 利用消息处理机制适时更新进度条 32
*/
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
String url = (String) msg.obj;
int length = msg.arg1;
ProgressBar bar = progressBars.get(url);
if (bar != null) {
// 设置进度条按读取的length长度更新
bar.incrementProgressBy(length);
if (bar.getProgress() == bar.getMax()) {
Toast.makeText(MainActivity.this, "下载完成!", 0).show();
// 下载完成后清除进度条并将map中的数据清空
LinearLayout layout = (LinearLayout) bar.getParent();
layout.removeView(bar);
progressBars.remove(url);
downloaders.get(url).delete(url);
downloaders.get(url).reset();
downloaders.remove(url);
}
}
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
showListView();
}
// 显示listView,这里可以随便添加音乐
private void showListView() {
List<Map<String, String>> data = new ArrayList<Map<String, String>>();
Map<String, String> map = new HashMap<String, String>();
map.put("name", "test1.mp3");
data.add(map);
map = new HashMap<String, String>();
map.put("name", "test2.mp3");
data.add(map);
map = new HashMap<String, String>();
map.put("name", "test3.mp3");
data.add(map);
map = new HashMap<String, String>();
map.put("name", "test4.mp3");
data.add(map);
SimpleAdapter adapter = new SimpleAdapter(this, data,
R.layout.list_item, new String[] { "name" },
new int[] { R.id.tv_resouce_name });
setListAdapter(adapter);
}
/**
* 83 * 响应开始下载按钮的点击事件 84
*/
public void startDownload(View v) {
// 得到textView的内容
LinearLayout layout = (LinearLayout) v.getParent();
String musicName = ((TextView) layout
.findViewById(R.id.tv_resouce_name)).getText().toString();
String urlstr = URL + musicName;
String localfile = SD_PATH + musicName;
// 设置下载线程数为4,这里是我为了方便随便固定的
int threadcount = 4;
// 初始化一个downloader下载器
Downloader downloader = downloaders.get(urlstr);
if (downloader == null) {
downloader = new Downloader(urlstr, localfile, threadcount, this,
mHandler);
downloaders.put(urlstr, downloader);
}
if (downloader.isdownloading())
return;
// 得到下载信息类的个数组成集合
LoadInfo loadInfo = downloader.getDownloaderInfors();
// 显示进度条
showProgress(loadInfo, urlstr, v);
// 调用方法开始下载
downloader.download();
}
/**
* 显示进度条
*/
private void showProgress(LoadInfo loadInfo, String url, View v) {
ProgressBar bar = progressBars.get(url);
if (bar == null) {
bar = new ProgressBar(this, null,
android.R.attr.progressBarStyleHorizontal);
bar.setMax(loadInfo.getFileSize());
bar.setProgress(loadInfo.getComplete());
System.out.println(loadInfo.getFileSize() + "--"
+ loadInfo.getComplete());
progressBars.put(url, bar);
LinearLayout.LayoutParams params = new LayoutParams(
LayoutParams.FILL_PARENT, 5);
((LinearLayout) ((LinearLayout) v.getParent()).getParent())
.addView(bar, params);
}
}
/**
* 响应暂停下载按钮的点击事件
*/
public void pauseDownload(View v) {
LinearLayout layout = (LinearLayout) v.getParent();
String musicName = ((TextView) layout
.findViewById(R.id.tv_resouce_name)).getText().toString();
String urlstr = URL + musicName;
downloaders.get(urlstr).pause();
}
}