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  如需转载请自行联系原作者
相关文章
|
2月前
|
数据库 Android开发 开发者
构建高效Android应用:采用Kotlin协程优化网络请求处理
【2月更文挑战第30天】 在移动应用开发领域,网络请求的处理是影响用户体验的关键环节。针对Android平台,利用Kotlin协程能够极大提升异步任务处理的效率和简洁性。本文将探讨如何通过Kotlin协程优化Android应用中的网络请求处理流程,包括协程的基本概念、网络请求的异步执行以及错误处理等方面,旨在帮助开发者构建更加流畅和响应迅速的Android应用。
|
4月前
|
安全 API Android开发
Android网络和数据交互: 解释Retrofit库的作用。
Android网络和数据交互: 解释Retrofit库的作用。
39 0
|
28天前
|
编解码 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)1
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)
47 1
|
28天前
|
编解码 开发工具 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
27 2
|
6天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
7天前
|
存储 应用服务中间件 网络安全
Android 网络链接稳定性测试解决方案
Android 网络链接稳定性测试解决方案
17 0
|
14天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android's AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
11 0
|
14天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
11 0
|
22天前
|
JSON 安全 Java
Android网络部分-----网络数据请求、解析
Android网络部分-----网络数据请求、解析
Android网络部分-----网络数据请求、解析
|
25天前
|
缓存 Java API
Android 应用中基于 Retrofit 的网络请求优化实践
【4月更文挑战第5天】 在移动开发领域,网络通信是实现数据交换与服务集成的关键环节。针对安卓平台,Retrofit 作为一种流行且强大的HTTP客户端库,提供了简洁高效的网络请求解决方案。本文将深入探讨在 Android 应用程序中使用 Retrofit 进行网络请求时的性能优化策略,涵盖异步处理、请求重试机制、线程池管理以及缓存策略等方面。通过这些优化手段,开发者可以显著提升应用的响应速度和用户体验,同时确保数据传输的可靠性和效率。
10 1