zoukankan      html  css  js  c++  java
  • 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会有选项,请务必熟悉!!

    image

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

    InputStreamReader
    InputStream

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

    InputStreamReader 的读取方式

    //创建一个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 的读取方式

    //创建一个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的使用

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

    //新建一个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的用法

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

    //获取一个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,格式化显示数据

    image

    #2,尝试自己把原始显示改成这样,实在不行请参考具体代码在我(tom_achai)的svn文件夹下,FileUtils类中parseSize()方法中,有需要的可以去看

    第六天:细节的设计,逻辑的陷阱.完成mp3播放功能

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

    1,初步认识UI设计的

    #1:UI的设计一个字拖!!!!!!!!!!!!!图片在群共享自己下载

    image 

    2,熟悉绑定按钮监听器

    #2,自己思考绑定监听器用匿名类好,还是用内部类好

    3,尝试比较service和activity在使用intent上的细小区别

    //视频中的重要代码讲解
    
    //进行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的任务

    //----------------------------------------------------
    //注意!!!!!!这些只是关键代码块,用来帮助思考,记忆和排错使用
    //如果,一下代码有打错的..请提醒我一下,回复本博客...
    //---------------------------------------------------
    
    //关键代码块
    //例如在播放监听器中的实现
    //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;
    
    }
    
    

    3,lrc需要要到的知识

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

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

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

    要点略讲

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

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

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

  • 相关阅读:
    MVC系列14-后台我的文章页
    MVC系列-13.前台文章显示页
    MVC系列-12.项目的重新规划
    MVC系列-11.两表联合-发表文章
    MVC系列-10.用户验证-导航条改造
    百思不得姐第4天:文本框占位文字颜色
    swift学习:自定义Log
    swift学习第十六天:懒加载和tableView
    swift学习第十五天:闭包
    swift学习第十四天:属性监听器
  • 原文地址:https://www.cnblogs.com/youxilua/p/2160916.html
Copyright © 2011-2022 走看看