一、简介
1.在onListItemClick()中new Intent,Intent以存储序列化后的mp2Info对象作为参数,启动serivce
2.DownloadService在onStartCommand()中通过intent 获取mp3info,开启新线程,利用HttpDownloader下载文件到sdcard
二、代码
1.xml(1)AndroidManifest.xml增加
1
2.java
(1)Mp3ListActivity.java1 @Override 2 protected void onListItemClick(ListView l, View v, int position, long id) { 3 //根据用户点击列表当中的位置来得到响应的Mp3Info对象 4 Mp3Info info = infos.get(position); 5 //生成Intent对象 6 Intent intent = new Intent(); 7 //将Mp3Info对象存入到Intent对象当中 8 intent.putExtra("mp3Info", info); 9 intent.setClass(this, DownloadService.class);10 //启动Service11 startService(intent);12 super.onListItemClick(l, v, position, id);13 }
(2)DownloadService.java
1 package tony.mp3player.service; 2 3 import tony.download.HttpDownloader; 4 import tony.model.Mp3Info; 5 import android.app.Service; 6 import android.content.Intent; 7 import android.os.IBinder; 8 9 public class DownloadService extends Service{10 11 @Override12 public IBinder onBind(Intent intent) {13 return null;14 }15 16 //每次用户点击ListActivity当中的一个条目时,就会调用该方法17 @Override18 public int onStartCommand(Intent intent, int flags, int startId) {19 //从Intent对象当中将Mp3Info对象取出20 Mp3Info info = (Mp3Info) intent.getSerializableExtra("mp3Info");21 //生成一个下载线程,并将Mp3Info对象作为参数传递到线程对象当中22 DownloadThread thread = new DownloadThread(info);23 //启动新线程24 new Thread(thread).start();25 return super.onStartCommand(intent, flags, startId);26 }27 28 class DownloadThread implements Runnable {29 private Mp3Info info;30 31 public DownloadThread(Mp3Info info) {32 super();33 this.info = info;34 }35 36 @Override37 public void run() {38 //根据MP3文件的名字,生成下载地址39 String urlStr = "http://192.168.1.104:8080/mp3/" + info.getMp3Name();40 HttpDownloader downloader = new HttpDownloader();41 int result = downloader.downFile(urlStr, "mp3", info.getMp3Name());42 String msg = null;43 switch (result) {44 // -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在45 case -1:46 msg = "下载失败";break;47 case 0:48 msg = "文件下载成功";break;49 case 1:50 msg = "文件已经存在,不需要重复下载";break;51 }52 //使用Notification提示客户下载结果53 }54 55 }56 }