• 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中更新歌词

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

  • 相关阅读:
    node
    github
    [模块] pdf转图片-pdf2image
    python 15 自定义模块 随机数 时间模块
    python 14 装饰器
    python 13 内置函数II 匿名函数 闭包
    python 12 生成器 列表推导式 内置函数I
    python 11 函数名 迭代器
    python 10 形参角度 名称空间 加载顺序
    python 09 函数参数初识
  • 原文地址:https://www.cnblogs.com/youxilua/p/2160916.html
Copyright © 2020-2023  润新知