ANDROID_MARS学习笔记_S01原始版_021_MP3PLAYER001_下载mp3文件
一、简介
1.在onListItemClick()中new Intent,Intent以存储序列化后的mp2Info对象作为参数,启动serivce
2.DownloadService在onStartCommand()中通过intent 获取mp3info,开启新线程,利用HttpDownloader下载文件到sdcard
二、代码
1.xml
(1)AndroidManifest.xml
增加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.java
(1)Mp3ListActivity.java
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//根据用户点击列表当中的位置来得到响应的Mp3Info对象
Mp3Info info = infos.get(position);
//生成Intent对象
Intent intent = new Intent();
//将Mp3Info对象存入到Intent对象当中
intent.putExtra("mp3Info", info);
intent.setClass(this, DownloadService.class);
//启动Service
startService(intent);
super.onListItemClick(l, v, position, id);
}
(2)DownloadService.java
package tony.mp3player.service; import tony.download.HttpDownloader;
import tony.model.Mp3Info;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder; public class DownloadService extends Service{ @Override
public IBinder onBind(Intent intent) {
return null;
} //每次用户点击ListActivity当中的一个条目时,就会调用该方法
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//从Intent对象当中将Mp3Info对象取出
Mp3Info info = (Mp3Info) intent.getSerializableExtra("mp3Info");
//生成一个下载线程,并将Mp3Info对象作为参数传递到线程对象当中
DownloadThread thread = new DownloadThread(info);
//启动新线程
new Thread(thread).start();
return super.onStartCommand(intent, flags, startId);
} class DownloadThread implements Runnable {
private Mp3Info info; public DownloadThread(Mp3Info info) {
super();
this.info = info;
} @Override
public void run() {
//根据MP3文件的名字,生成下载地址
String urlStr = "http://192.168.1.104:8080/mp3/" + info.getMp3Name();
HttpDownloader downloader = new HttpDownloader();
int result = downloader.downFile(urlStr, "mp3", info.getMp3Name());
String msg = null;
switch (result) {
// -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
case -1:
msg = "下载失败";break;
case 0:
msg = "文件下载成功";break;
case 1:
msg = "文件已经存在,不需要重复下载";break;
}
//使用Notification提示客户下载结果
} }
}
ANDROID_MARS学习笔记_S01原始版_021_MP3PLAYER001_下载mp3文件的更多相关文章
- ANDROID_MARS学习笔记_S01原始版_009_下载文件
一.代码1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...
- ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER003_播放mp3
一.简介 1.在onListItemClick中实现点击条目时,跳转到PlayerActivity,mp3info通过Intent传给PlayerActivity 2.PlayerActivity通过 ...
- ANDROID_MARS学习笔记_S01原始版_020_Mp3player001_歌曲列表
一.项目设计 二.歌曲列表简介 1.利用java.net.HttpURLConnection以流的形式下载xml文件为String 2.自定义ContentHandler-->Mp3ListCo ...
- ANDROID_MARS学习笔记_S01原始版_011_XML
一.代码 1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...
- ANDROID_MARS学习笔记_S01原始版_005_RadioGroup\CheckBox\Toast
一.代码 1.xml(1)radio.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- ANDROID_MARS学习笔记_S01原始版_004_TableLayout
1.xml <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android ...
- ANDROID_MARS学习笔记_S01原始版_003_对话框
1.AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest ...
- ANDROID_MARS学习笔记_S01原始版_002_实现计算乘积及menu应用
一.代码 1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
- ANDROID_MARS学习笔记_S01原始版_001_Intent
一.Intent简介 二.代码 1.activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.co ...
随机推荐
- 以 280W 数据为依据。对比SQL2008 表分区前和分区后的 T_SQL 效率
一: 数据库的优化一直项目后期的重中之重,特别是当单表数据庞大到1000W时候.各种SQL语句执行效率都会慢很多.SQL 效率 与索引,行数据,列数据,以及Where 刷选字段类型 (效率 整数型大于 ...
- 用EnumDisplaySettings获取显示设置信息
LPDEVMODE pMode = new DEVMODE;//开空间 DWORD dwBitsPerPel=0;//每象素所使用的显存位数(Bits) DWORD dwPelsWidth=0;//水 ...
- C#学习笔记5:数据类型与进制转换
1.C#: 8种整形类型.2种用于科学计算的二进制浮点类型.1种用于金融计算的十进制浮点类型. 2.Decimal是一种特殊的浮点类型,能够存储大数字而无表示错误. 常用于货币计算.在表示的所有十进制 ...
- idl生成.h .c文件
1.从命令行执行 设置INCLUDE.LIB等,可先运行vsvars32.bat(C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\ ...
- 收回动态VHD的未使用空间
随着虚拟机的运行,虚拟机磁盘所占空间越来越大,而实际使用并没有那么大,考虑回收未使用部分. 收回动态VHD的未使用空间(压缩VHD) 有一种方法是ghost,两个vhd文件对拷.本文不是那个方法 本文 ...
- redirect_uri参数错误解决方法
坑,微信改来改去的,找死人了,以前在“开发者中心”中,现在改在”接口权限“中了.
- Sublime Text2上搭建C/C++环境
环境:Sublime Text2 win7 64位 1.下载Sublime Text2并安装 下载地址:http://www.sublimetext.com/ 2.需要用 ...
- 在.net中设置debug模式预设代码
#region DEBUG #if DEBUG this.WorkOrgID.Value = "4DC4507E-434D-4EEB-967E-1E5CC28AA0C1"; thi ...
- 第三篇、C_双向链表(循环链表)
简介: 在用C/C++开发系统中,我们知道用数组或者单链表来开发,如果是数据比较大的话,性能很不好,效率也不高.因此常常需要考虑系统的实用性,常常采用双向链表来开发. 示例: 1.数据 typedef ...
- 【HeadFirst设计模式】11.代理模式
定义: 为另一个对象提供一个替身或占位符以访问这个对象. 远程代理 虚拟代理 保护代理.动态代理 其它: 远程代理的远程接口必须继承记号接口Remote 远程代理的使用过程中,要注意序列化的问题, 远 ...