🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 第十四天.Android项目案例: mp3播放器 ### ### 14.1需求列表 ### 1. 创建Web应用,管理mp3文件。 2. 编写XML文件,其中包含mp3文件名。 3. Android程序需要通过网络下载XML格式列表文件。 4. 解析XML文件,在手机中显示资源列表。 5. 点击mp3名字需要下载相应mp3文件。 6. 需要支持多线程下载。 7. 需要显示软件下载的进度。 8. 能够本地与远程播放mp3音乐文件。 9. 在后台服务中播放mp3文件。 10. 在播放器中需要植入广告动画。 11. 需要有关于软件的介绍和简单使用方法。 12. 用样式或主题控制字体与颜色。 #### 14.1.1 需求解析: #### 1.创建Web应用 + 创建项目Mp3Site + 在WebRoot或WebContent目录下面创建music子目录 + 在music目录中添加mp3文件与musics.xml 参考项目: MediaSite #### 14.1.2 需求解析: #### 2.编写XML文件 + song.mp3 + ILoveYou.mp3 参考项目: MediaSite #### 14.1.3 需求解析: #### 3.网络下载XML ``` URL url = newURL(“http://192.168.50.50:8080/Mp3Site/music/musics.xml"); conn = url.openConnection(); is_sdcard = conn.getInputStream(); File destFile = newFile("/sdcard/musics.xml"); destFile.createNewFile(); String path = destFile.getAbsolutePath(); FileOutputStream fos_sdcard = newFileOutputStream(destFile); int bytesRead; byte buff[] = newbyte[1024]; while ((bytesRead = is_sdcard.read(buff))> 0) { fos_sdcard.write(buff,0, bytesRead); } fos_sdcard.close(); is_sdcard.close(); ``` 参考:/SuperMediaPlayer/src/com/lxt008/common/DownloadFileActivity.java #### 14.1.4 需求解析: #### 4.解析XML文件示 ``` List list = newArrayList(); /* 将XML转换成Document对象 */ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db =dbf.newDocumentBuilder(); Document doc = db.parse(is); NodeList nodeList =doc.getElementsByTagName(elementsTagName); int len = nodeList.getLength(); for (int i = 0; i < len; i++) { Stringcontent = nodeList.item(i).getChildNodes().item(0) .getNodeValue(); list.add(content); } ``` 参考:/SuperMediaPlayer/src/com/lxt008/common/XmlUtil.java #### 14.1.5 需求解析: #### 5.下载mp3 + 与下载XML文件类似。把mp3文件放到/sdcard中。 + 把mp3文件名添加到ListView中。Mp3文件多的话需要放到ScrollView中 + 参考:/SuperMediaPlayer/src/com/lxt008/music/MusicActivity.java( onListItemClick方法)与ScrollViewDemo #### 14.1.6 需求解析: #### 6.多线程下载mp3 + 参考:/SuperMediaPlayer/src/com/lxt008/music/MusicActivity.java( onListItemClick方法) + 在点击列表项的时候开一个线程去下载。 + onListItemClick 方法中new Thread(Runnable).start() #### 14.1.7 需求解析: #### 7.显示mp3下载进度 + 在下载播放mp3的线程中通过Handler发下载状态的消息 + handleMessage()依据消息更新进度条。 参考:/SuperMediaPlayer/src/com/lxt008/music/MusicActivity.java #### 14.1.8 需求解析: #### 8.在线播放mp3 + 在线播放与下载后本地播放需要使用TabHost组织界面 ``` mTabHost.addTab(mTabHost.newTabSpec("tab_test1") .setIndicator("TAB1",getResources().getDrawable(R.drawable.img1)) .setContent(newIntent(this,OtherActivity.class))); ``` 参考项目: OnlineMp3与TabHostDemo #### 14.1.9 需求解析: #### 9.后台播放mp3 + 需要在关闭播放器后音乐还能播放,所以要用Service来播放 + 参考:/SuperMediaPlayer/src/com/lxt008/music/MusicService.java #### 14.1.10 需求解析: #### 10.植入广告 + 可以做成动画切换图片显示 + 参考项目: AnimationDrawableDemo #### 14.1.11 需求解析: #### 11.关于对话框 + 加入“关于”、“帮助”等菜单。 + 点“关于”菜单中显示版权信息与软件简单介绍的对话框。 + 点“帮助”菜单中显示mp3播放器的简单用法的对话框。 参考项目:MenuDemo与DialogDemo #### 14.1.12 需求解析: #### 12.用主题控制字体与颜色 + ThemeDemoesValues下面放置themes.xml + 在themes.xml中定义应用全局的样式 参考项目:ThemeDemo [源代码下载](http://www.apkbus.com/android-83575-1-1.html)