android学习笔记7天打造一个简易网络Mp3播放器
2011-08-31 16:40 youxiachai 阅读(6009) 评论(14) 编辑 收藏 举报第一天:完成xml的下载与显示
要点及提示
请认真观看Mars [Android开发视频教学]01_29_代码编写(一)(上)
1,配置网络环境以方便下载文件
#1注意,网络连接中不要有断开的连接,不然,模拟器无法上网
#2用路由器的注意,写IP地址的时候不要用localhost,要用本机的ip
2,使用Listactivity
#3注意,记得要在layout里面注册!!
3,下载与显示xml要点
#4下载的时候,记得添加权限!!不会下载的话请看:MARS视频[Android开发视频教学]01_18_文件下载.mp4 详情
#5xml的解析不懂的请看MARS视频[Android开发视频教学]01_20_XML文件解析
#6视频的最后endElement 中 qName 请改为localName
解析用的xml下载
http://u.115.com/file/dn6l2z0g#
说明:跟视频那个是不一样的,请按照原理改相应的代码…
mp3.xml
第二天:对前一天的知识进行复习与回顾,完成TextView的数据显示
请认真观看Mars [Android开发视频教学]01_29_代码编写(一)(下)
1,初步认识android的UI设计
#1,对于UI设计不要死敲代码,插件有图形操作功能,属性的编写直接右键你所选择的layout会有选项,请务必熟悉!!
#2,
2,Java基础
#3,尝试学习并总结,List,Map的使用,以及其迭代方式,添加数据等
3,SimpleAdapter的使用
#4,不会的请看视频[Android开发视频教学].01_13_常用控件(三).mp4 详情
#5,关于这个SimpleAdapter的使用,记住两点
(1),在创建这个SimpleAdapter我们要传那些参数进去
(2),我们在创建完这个SimpleAdapter请务必记得要生效的话setListAdapter();
4,学习归纳Mars视频中关于重构的思想
第三天:颇考验人耐性与基础的一天:完成mp3文件的下载
请认真观看Mars [Android开发视频教学]01_29_代码编写(二)
一:下载前的准备
1,明白FileUtils起到了什么作用
2,尝试理解这两种流的区别,并在理解后回复本博客
12InputStreamReader
InputStream
3,下载用的关键代码助记!!
InputStreamReader 的读取方式
12345678910111213//创建一个URL对象
URL url =
new
URL(urlString);
//创建一个HttpURLConnection
HttpURLConnetion urlConn = (HttpURLConnection)url.openConnecton();
//读取数据
BufferReader buffer =
new
BufferReader(
new
InputStreamReader(urlConn.getInputStream()));
StringBuffer sb =
null
;
String line =
null
;
while
((line = buffer.readline()) !=
null
){
sb.append(line);
}
InputStream 的读取方式
12345678910111213141516171819202122//创建一个URL对象
URL url =
new
URL(urlString);
//创建一个HttpURLConnection
HttpURLConnection urlConn =(HttpURLConnection)url.openConnection();
//获取一个InputStream
InputStream inputStream = urlConn.getInputStream();
//你看到省略了很多代码
//创建一个文件输出流
OutputStream output =
new
FileOutputStrem(file);
//建立缓冲
byte
[] buffer =
new
byte
[
4
*
1024
];
//将输入流写到文件当中
while
((inputStream.read(buffer)) != -
1
){
output.write(buffer);
}
output.flush();
这些都是关键代码块片段请对照源代码好好复习,理解
4,Service的用法,不懂的先看[Android开发视频教学]01_25_Service初步(一).mp4 详情
1,认真看视频着重看一下几点
#1,AndroidMainifest的注册
#2,activity与service间的通信
5,权限的注册
1,sdcard的注册,怎么注册?用那些代码?视频都有请认真观看…
6,Intent的使用
关键代码助记,具体如何使用自己看视频
12345678910111213141516171819//新建一个inent
Intent intent =
new
Intent();
//将数据压到intent栈里面
//传一个对象的时候请注意,该类已经实现序列好接口
intent.putExtra(
"mp3Info"
, mp3Info);
//将数据传到一个service
intent.setClass(
this
,DownloadService.
class
);
//启动这个intent
startService(intent);
//-----------------------------------
//你看到了一个service
//在目标service获取值
Mp3Info mp3Info = (Mp3Info)intent.getSerializableExtra(
"mp3Info"
);
以上就是第三天需要了解以及明白的事情,不会的多看看视频…多问问人
第四天:知识的总结与归纳…待续…
第五天:新的知识,新的挑战:完成Tabactivity的显示和增强FileUtilS的功能
请认真观看Mars [Android开发视频教学]01_29_代码编写(三)
1,学习并理解Tabactivity的用法
关键代码简要说明,请结合完整代码理解
12345678910111213141516171819202122232425//获取一个Resource对象
Resource res = getResource;
//获取一个activity,TabHost
TabHost tabHost = getTabHost();
//创建一个标签
TabHost.spec spec;
//创建一个intent用来在tab中运行一个activity
Intent intent;
//建立一个tab
spec = tabHost.newTabSpec(
"test"
);
//为这个tab添加名字,和图标
spec.setIndicator(
"test"
,res.getDrawnable(android.R.drawnable.stat_sys_down));
//在tab中运行activity
Intent intent =
new
Intent().setClass(
this
,
"需要运行的的activity"
);
spec.setConent(intent);
//把tab添加到tabhost中
tabHost.addTabspec);
//再添加一个tab,请重复14行 - 23行代码,注意intent那里要改下...
2,学习并掌握读取sdcard目录文件的技巧
#1,提示用好File 类与熟练操作list
3,格式化显示数据
#2,尝试自己把原始显示改成这样,实在不行请参考具体代码在我(tom_achai)的svn文件夹下,FileUtils类中parseSize()方法中,有需要的可以去看
第六天:细节的设计,逻辑的陷阱.完成mp3播放功能
请认真观看Mars [Android开发视频教学]01_29_代码编写(四)
1,初步认识UI设计的
#1:UI的设计一个字拖!!!!!!!!!!!!!图片在群共享自己下载
2,熟悉绑定按钮监听器
#2,自己思考绑定监听器用匿名类好,还是用内部类好
3,尝试比较service和activity在使用intent上的细小区别
123456789101112131415161718192021222324252627282930313233343536373839404142434445//视频中的重要代码讲解
//进行activity与service之间的跳转
//一个activity 叫做 Mp3listActivity
//一个service 叫做 Mp3downloadService
//代码片段
Intent intent =
new
Intent();
intent.putExtra(
"mp3info"
,mp3info);
intent.setClass(
this
,Mp3downloadService.
class
);
startService(intent);
//--------------------------
//你看到了跳转到一个service
//--------------------------
//在service中
//startCommand(Inent intent,int flags, int startId)
//取值代码
Mp3Info mp3info = (Mp3Info)intent.getSerializableExtra(
"mp3info"
);
//-----------------------------------------------------------------
//进行activity与activity之间的跳转
//一个activity 叫做 Mp3listActivity
//一个activity 叫做 Mp3PlayActivity
//关键代码片段
Intent intent =
new
Intent();
intent.putExtra(
"mp3info"
, mp3info);
intent.setClass(
this
,Mp3PlayActivity.
class
);
startActivity(intent);
//-----------------------------
//你看到了跳转到Mp3PlayActivity
//-----------------------------
//onCreate()方法中的取值代码
intent = getIntent();
Mp3Info mp3info = (Mp3Info)intent.getSerializableExtra(
"mp3info"
);
//------------------------------------------------
//自己尝试了解,并不看书打出以上代码(本人可以,你也可以),并且,能自己得出Service和activity
//intent传值的细小区别
4,初步认识MediaPalyer用来播放mp3
5,留给大家的问题,为什么在UI预览中用*.png做的imageButton可以预览,而用*.ico不能预览,这个
第七天:吹起最后的集结号:把播放功能集成到Service和搞清楚lrc播放的方式
请认真观看Mars [Android开发视频教学]01_29_代码编写(五)
1,思考: 为什么要用service播放,用service有什么好处
2,分享我的移植方案
#1,将播放相关的全部代码都放到service中
#2,将原本在activity只做启动service的任务
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849//----------------------------------------------------
//注意!!!!!!这些只是关键代码块,用来帮助思考,记忆和排错使用
//如果,一下代码有打错的..请提醒我一下,回复本博客...
//---------------------------------------------------
//关键代码块
//例如在播放监听器中的实现
//mp3info为mp3的信息
//playmsg是传到service用来判断当前处于何种状态
//播放为1,暂停为0,停止为-1
//onClick()方法
Intent intent =
new
Intent();
intent.putExtra(
"mp3info"
,mp3info);
intent.putExtra(
"playmsg"
,
1
);
intent.setClass(Mp3PlayActivity.
this
,Mp3PlayService.
class
);
startService(intent);
//--------------------
//你看到了一个service
//--------------------
//playmsg的用法不完全举例
//onStartCommand()方法中
//stop(),pause(),play(),都为自己要去实现播放功能方法
//mp3info为歌曲信息
//接受playmsg,注意与接受一个对象时的区别
int
playmsg = intent.getIntExtra(
"playmsg"
,
0
);
//判断playmsg,进行相应的操作
switch
(playmsg){
case
-
1
:
stop();
break
;
case
0
:
pause();
break
;
case
1
:
if
(mp3info !=
null
){
play(mp3info)
}
break
;
}
1 |
3,lrc需要要到的知识
1#
1
,java基础中队列的操作
1#
2
,切记,你的文件夹下有lrc文件
1#
3
,回头在下载mp3的那里,加上下载lrc文件的代码
1#
4
,还有一点正则的基础
12345//在读取本地目录的时候用到
//替换后缀的技巧
//关键在于String中,replace的使用
String mp3Name =
"HelloWorld.mp3"
;
String mp3lrc = mp3Name.replace(
".mp3"
,
".lrc"
);
第八天:革命还没成功,同志仍需努力.解决歌词在后台播放中的更新问题
请认真观看Mars [Android开发视频教学]01_29_代码编写(六)
要点略讲
1,把歌词更新模块放到service中
2,用Broadcast来在activity中更新歌词
第九天:结束只不过是,新的开始.简单说说存在的问题,以及要优化的地方
作者:游戏阿柴
出处:http://www.cnblogs.com/youxilua
本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
微博联系:新浪微博
用支付宝赞助博主:http://me.alipay.com/youxilua
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架