## 第十四天.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)