android学习笔记7天打造一个简易网络Mp3播放器

简介:

第一天:完成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,尝试理解这两种流的区别,并在理解后回复本博客

 
    
  1. InputStreamReader  
  2. InputStream 

 3,下载用的关键代码助记!!

InputStreamReader 的读取方式

 
    
  1. //创建一个URL对象  
  2. URL url = new URL(urlString);   
  3. //创建一个HttpURLConnection  
  4. HttpURLConnetion urlConn = (HttpURLConnection)url.openConnecton();   
  5. //读取数据  
  6. BufferReader buffer = new BufferReader(  
  7. new InputStreamReader(urlConn.getInputStream()));  
  8. StringBuffer sb = null;  
  9. String line = null;  
  10. while((line = buffer.readline()) != null){      
  11. sb.append(line);  


InputStream 的读取方式

 
    
  1. //创建一个URL对象  
  2. URL url = new URL(urlString);   
  3. //创建一个HttpURLConnection  
  4. HttpURLConnection urlConn =(HttpURLConnection)url.openConnection();   
  5. //获取一个InputStream  
  6. InputStream inputStream = urlConn.getInputStream();   
  7. //你看到省略了很多代码   
  8. //创建一个文件输出流  
  9. OutputStream output = new FileOutputStrem(file);   
  10. //建立缓冲byte[]   
  11. buffer = new byte[4*1024];   
  12. //将输入流写到文件当中  
  13. while((inputStream.read(buffer)) != -1){     
  14. output.write(buffer);  
  15. }output.flush(); 

这些都是关键代码块片段请对照源代码好好复习,理解

4,Service的用法,不懂的先看[Android开发视频教学]01_25_Service初步(一).mp4 详情

1,认真看视频着重看一下几点

#1,AndroidMainifest的注册

#2,activity与service间的通信

5,权限的注册

1,sdcard的注册,怎么注册?用那些代码?视频都有请认真观看…

6,Intent的使用

关键代码助记,具体如何使用自己看视频

 
    
  1. //新建一个inentIntent   
  2. intent = new Intent();   
  3. //将数据压到intent栈里面  
  4. //传一个对象的时候请注意,该类已经实现序列好接口  
  5. intent.putExtra("mp3Info", mp3Info);    
  6. //将数据传到一个  
  7. serviceintent.setClass(this,DownloadService.class);   
  8. //启动这个  
  9. intentstartService(intent);   
  10. //-----------------------------------  
  11. //你看到了一个service   
  12. //在目标service获取值Mp3Info   
  13. mp3Info = (Mp3Info)intent.getSerializableExtra("mp3Info"); 

以上就是第三天需要了解以及明白的事情,不会的多看看视频…多问问人
 

第四天:知识的总结与归纳…待续…

 
 

第五天:新的知识,新的挑战:完成Tabactivity的显示和增强FileUtilS的功能

请认真观看Mars [Android开发视频教学]01_29_代码编写(三)

1,学习并理解Tabactivity的用法

关键代码简要说明,请结合完整代码理解

 
    
  1. //获取一个Resource对象  
  2. Resource res = getResource;   
  3. //获取一个activity,TabHost  
  4. TabHost tabHost = getTabHost();   
  5. //创建一个标签  
  6. TabHost.spec spec;   
  7. //创建一个intent用来在tab中运行一个  
  8. activityIntent intent;   
  9. //建立一个tab  
  10. spec = tabHost.newTabSpec("test");  
  11. //为这个tab添加名字,和图标  
  12. spec.setIndicator("test",res.getDrawnable(android.R.drawnable.stat_sys_down));   
  13. //在tab中运行activity  
  14. Intent intent = new Intent().setClass(this,"需要运行的的activity");  
  15. spec.setConent(intent);   
  16. //把tab添加到tabhost中  
  17. tabHost.addTabspec);   
  18. //再添加一个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上的细小区别

 
    
  1. //视频中的重要代码讲解   
  2. //进行activity与service之间的跳转  
  3. //一个activity 叫做 Mp3listActivity  
  4. //一个service 叫做 Mp3downloadService   
  5. //代码片段  
  6. Intent intent = new Intent();   
  7. intent.putExtra("mp3info",mp3info);  
  8. intent.setClass(this,Mp3downloadService.class);  
  9. startService(intent);   
  10. //--------------------------  
  11. //你看到了跳转到一个service  
  12. //--------------------------   
  13. //在service中  
  14. //startCommand(Inent intent,int flags, int startId)  
  15. //取值代码  
  16. Mp3Info mp3info = (Mp3Info)intent.getSerializableExtra("mp3info");   
  17. //-----------------------------------------------------------------    
  18. //进行activity与activity之间的跳转  
  19. //一个activity 叫做 Mp3listActivity  
  20. //一个activity 叫做 Mp3PlayActivity   
  21. //关键代码片段  
  22. Intent intent = new Intent();  
  23. intent.putExtra("mp3info", mp3info);  
  24. intent.setClass(this,Mp3PlayActivity.class);  
  25. startActivity(intent);   
  26. //-----------------------------  
  27. //你看到了跳转到Mp3PlayActivity  
  28. //-----------------------------  
  29. //onCreate()方法中的取值代码  
  30. intent = getIntent();  
  31. Mp3Info mp3info = (Mp3Info)intent.getSerializableExtra("mp3info");   
  32. //------------------------------------------------  
  33. //自己尝试了解,并不看书打出以上代码(本人可以,你也可以),并且,能自己得出Service和activity  
  34. //intent传值的细小区别 

4,初步认识MediaPalyer用来播放mp3

5,留给大家的问题,为什么在UI预览中用*.png做的imageButton可以预览,而用*.ico不能预览,这个
 

第七天:吹起最后的集结号:把播放功能集成到Service和搞清楚lrc播放的方式

请认真观看Mars [Android开发视频教学]01_29_代码编写(五)

1,思考: 为什么要用service播放,用service有什么好处

2,分享我的移植方案

#1,将播放相关的全部代码都放到service中

#2,将原本在activity只做启动service的任务

 
    
  1. //----------------------------------------------------  
  2. //注意!!!!!!这些只是关键代码块,用来帮助思考,记忆和排错使用  
  3. //如果,一下代码有打错的..请提醒我一下,回复本博客...  
  4. //---------------------------------------------------   
  5. //关键代码块  
  6. //例如在播放监听器中的实现  
  7. //mp3info为mp3的信息  
  8. //playmsg是传到service用来判断当前处于何种状态  
  9. //播放为1,暂停为0,停止为-1  
  10. //onClick()方法  
  11. Intent intent = new Intent();  
  12. intent.putExtra("mp3info",mp3info);  
  13. intent.putExtra("playmsg",1);  
  14. intent.setClass(Mp3PlayActivity.this,Mp3PlayService.class);  
  15. startService(intent);    
  16. //--------------------  
  17. //你看到了一个service  
  18. //--------------------  
  19. //playmsg的用法不完全举例  
  20. //onStartCommand()方法中  
  21. //stop(),pause(),play(),都为自己要去实现播放功能方法  
  22. //mp3info为歌曲信息   
  23. //接受playmsg,注意与接受一个对象时的区别int playmsg = intent.getIntExtra("playmsg",0);   
  24. //判断playmsg,进行相应的操作  
  25. switch(playmsg){case -1:stop();    
  26. break; case 0:pause();break;   
  27. case 1:if(mp3info != null){     
  28.  play(mp3info)} break;   

 3,lrc需要要到的知识

 
    
  1. #1,java基础中队列的操作   
  2. #2,切记,你的文件夹下有lrc文件   
  3. #3,回头在下载mp3的那里,加上下载lrc文件的代码   
  4. #4,还有一点正则的基础   
  5. //在读取本地目录的时候用到  
  6. //替换后缀的技巧  
  7. //关键在于String中,replace的使用  
  8. String mp3Name = "HelloWorld.mp3";  
  9. String mp3lrc = mp3Name.replace(".mp3",".lrc");   

第八天:革命还没成功,同志仍需努力.解决歌词在后台播放中的更新问题

请认真观看Mars [Android开发视频教学]01_29_代码编写(六)

要点略讲

1,把歌词更新模块放到service中

2,用Broadcast来在activity中更新歌词 


 

第九天:结束只不过是,新的开始.简单说说存在的问题,以及要优化的地方


本文转自 liam2199 博客,原文链接: http://blog.51cto.com/youxilua/772998  如需转载请自行联系原作者
相关文章
|
1月前
|
XML 存储 数据库
如何使用Android Studio创建一个基本的音乐播放器应用
如何使用Android Studio创建一个基本的音乐播放器应用
41 0
|
1月前
|
缓存 网络协议 安全
Android网络面试题之Http基础和Http1.0的特点
**HTTP基础:GET和POST关键差异在于参数传递方式(GET在URL,POST在请求体),安全性(POST更安全),数据大小限制(POST无限制,GET有限制),速度(GET较快)及用途(GET用于获取,POST用于提交)。面试中常强调POST的安全性、数据量、数据类型支持及速度。HTTP 1.0引入了POST和HEAD方法,支持多种数据格式和缓存,但每个请求需新建TCP连接。**
30 5
|
1月前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
28 2
|
1月前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
47 9
|
1月前
|
缓存 网络协议 Android开发
Android网络面试题之Http1.1和Http2.0
HTTP/1.1 引入持久连接和管道机制提升效率,支持分块传输编码和更多请求方式如PUT、PATCH。Host字段指定服务器域名,RANGE用于断点续传。HTTP/2变为二进制协议,实现多工处理,头信息压缩和服务器推送,减少延迟并优化资源加载。HTTP不断发展,从早期的简单传输到后来的高效交互。
26 0
Android网络面试题之Http1.1和Http2.0
|
1月前
|
JSON Java API
【Android】使用 Retrofit2 发送异步网络请求的简单案例
**摘要:** Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。
61 1
|
1月前
|
缓存 网络协议 Java
Android面试题之Java网络通信基础知识
Socket是应用与TCP/IP通信的接口,封装了底层细节。网络通信涉及连接、读写数据。BIO是同步阻塞,NIO支持多路复用(如Selector),AIO在某些平台提供异步非阻塞服务。BIO示例中,服务端用固定线程池处理客户端请求,客户端发起连接并读写数据。NIO的关键是Selector监控多个通道的事件,减少线程消耗。书中推荐《Java网络编程》和《UNIX网络编程》。关注公众号AntDream了解更多。
26 2
|
1月前
|
XML JSON Java
Android面试题 之 网络通信基础面试题
序列化对比:Serializable码流大、性能低;XML人机可读但复杂;JSON轻量、兼容性好但空间消耗大;ProtoBuff高效紧凑。支持大量长连接涉及系统限制调整、缓冲区优化。select/poll/epoll是IO多路复用,epoll在高连接数下性能更优且支持边缘触发。水平触发持续通知数据,边缘触发仅通知新数据。直接内存减少一次拷贝,零拷贝技术如sendfile和MMAP提升效率。关注公众号"AntDream"了解更多技术细节。
20 1
|
1月前
|
安全 Android开发 数据安全/隐私保护
同样的 APP 为何在 Android 8 以后网络感觉变卡?
【6月更文挑战第8天】Android 8 及以后系统中,APP 网络感觉变卡源于更严格的安全机制和后台限制,系统对网络优化的侧重改变,以及APP自身兼容性问题。开发者需优化APP,适应新系统,用户可更新APP或检查权限设置。通过共同努力,有望改善网络卡顿现象,提升用户体验。
|
1月前
|
安全 Java API
Android获取Wi-Fi网络列表
【6月更文挑战第21天】