畢業(yè)論文--android在線音樂播放器設計與實現(xiàn)_第1頁
已閱讀1頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  Android在線音樂播放器設計與實現(xiàn)</p><p>  摘要:移動互聯(lián)網(wǎng)發(fā)展瞬息萬變,以往的隨身聽、MP3等千篇一律的播放設備已經(jīng)越來越難以滿足人們多樣化的聽音樂需求了,而市面上的音樂播放器APP卻深陷商業(yè)的漩渦,盈利和用戶體驗總是難以成正比,看似琳瑯滿目的音樂應用卻沒有幾款真正讓用戶喜歡的。在這樣的背景下,課題基于Android開源平臺,使用Java語言開發(fā),采用Android Stu

2、dio + Gradle工具構建,并依靠OkHttp+Gson提供網(wǎng)絡框架,開發(fā)了一款Android在線音樂播放器。播放器支持播放在線音樂,上一曲、下一曲,切換播放模式,支持歌詞與專輯封面顯示,支持搜索、下載在線歌曲等基本功能,并擴展實現(xiàn)了夜間模式,定時關閉等功能,致力于給用戶提供更舒心的聽歌體驗。論文給出詳細的框架設計,系統(tǒng)流程設計,部分設計圖及主要功能運行流程圖,并對開發(fā)中遇到的主要問題進行了詳細討論,如通過Activity和Ser

3、vice通信實現(xiàn)后臺播放。經(jīng)過系統(tǒng)測試,系統(tǒng)實現(xiàn)了基本功能和擴展功能,性能達到了一定的指標。</p><p>  關鍵詞:在線音樂;播放器;定時關閉;Gradle;OkHttp</p><p>  Design and Implementation of Android-based Online Music Player</p><p>  Abstract: Th

4、e development of mobile Internet is constantly changing, the previous Walkman, MP3 player and other devices have been stereotyped increasingly difficult to meet people's demand for a variety of music, and the music p

5、layer market, APP has deep whirlpool business, earnings and proportional to the user experience is always difficult, seemingly dazzling music application did not allow several users to really like it. In this context, an

6、 object based on the Android open source platform de</p><p>  Keywords: online music, player, time off, gradle, okhttp</p><p><b>  目錄</b></p><p><b>  第1章 緒論1<

7、/b></p><p><b>  1.1 背景1</b></p><p>  1.2 國內外現(xiàn)狀1</p><p>  1.3 目標及范圍2</p><p>  1.4 核心技術3</p><p>  第2章 Android音樂播放器需求分析5</p>&

8、lt;p>  2.1 功能性需求分析5</p><p>  2.1.1 本地音樂5</p><p>  2.1.2 在線音樂6</p><p>  2.1.3 在線搜索8</p><p>  2.1.4 播放控制9</p><p>  2.1.5 擴展功能12</p><

9、;p>  2.2 非功能性需求分析14</p><p>  2.2.1 軟件性能指標14</p><p>  2.2.2 軟件兼容性14</p><p>  第3章 Android音樂播放器系統(tǒng)概要設計15</p><p>  3.1 主要設計內容15</p><p>  3.2 設計思想

10、15</p><p>  3.3 系統(tǒng)框架16</p><p>  3.4 系統(tǒng)功能17</p><p>  3.4.1 本地音樂17</p><p>  3.4.2 在線音樂18</p><p>  3.4.3 在線搜索18</p><p>  3.4.4 播放控制19

11、</p><p>  3.4.5 擴展功能19</p><p>  3.5 流程設計19</p><p>  第4章 Android音樂播放器存儲設計21</p><p>  4.1 本地存儲21</p><p>  4.2 遠程存儲22</p><p>  第5章 And

12、roid音樂播放器詳細設計與實現(xiàn)23</p><p>  5.1 系統(tǒng)架構詳細設計23</p><p>  5.1.1 系統(tǒng)架構方式分析23</p><p>  5.1.2 系統(tǒng)框架分析24</p><p>  5.1.3 網(wǎng)絡請求框架分析27</p><p>  5.1.4 數(shù)據(jù)緩存框架28&l

13、t;/p><p>  5.2 功能詳細設計30</p><p>  5.2.1 本地音樂詳細設計30</p><p>  5.2.2 在線音樂詳細設計32</p><p>  5.2.3 在線搜索詳細設計34</p><p>  5.2.4 播放控制詳細設計35</p><p>

14、  5.2.5 擴展功能詳細設計37</p><p>  5.2.6 功能設置詳細設計39</p><p>  5.2.7 關于界面詳細設計41</p><p>  第6章 Android音樂播放器系統(tǒng)測試43</p><p>  6.1 功能測試43</p><p>  6.1.1 測試環(huán)境4

15、3</p><p>  6.1.2 測試用例43</p><p>  6.1.3 測試結論44</p><p>  6.2 兼容性測試45</p><p><b>  結論47</b></p><p><b>  致謝48</b></p><

16、;p><b>  參考文獻49</b></p><p><b>  第1章 緒論</b></p><p><b>  1.1 背景</b></p><p>  Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放

17、手機聯(lián)盟領導及開發(fā)。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。2013年的第四季度,Android平臺手機的全球市場份額已經(jīng)達到78.1%。2013年09月24日谷歌開發(fā)的操作系統(tǒng)Android在迎來了5歲生日,全世界采用這款系統(tǒng)的設備數(shù)量已經(jīng)達到10億臺。如今,Android平臺手機的全球市場份額已達到84.7%。本設計的音樂播放器采用了Android開源系統(tǒng)技術,利用Java語言和Androi

18、d Studio工具對播放器進行開發(fā)。</p><p>  如今社會生活節(jié)奏日益加快,人們的壓力也越來越大,傾聽音樂則是最有效的減輕壓力的方法之一。隨著智能手機的普及,手機音質的提升,大多數(shù)人都有了在手機上聽歌的習慣,縱觀市面上的商業(yè)化音樂播放APP,大多臃腫不堪,功能繁瑣,而大多數(shù)功能都是用戶用不到的,大量消耗手機內存和CPU,操作復雜,同質化嚴重,廣告繁多,界面設計沒有吸引力,容易產生審美疲勞,無法使人全身心

19、的放松,有時遇到喜歡的音樂想要下載還要付費,大大降低了聽歌體驗。</p><p>  1.2 國內外現(xiàn)狀</p><p>  手機的越來越智能化相當大的程度都要通過軟件和應用來體現(xiàn),2011年盛放的移動互聯(lián)網(wǎng)應用市場帶來了各門類的諸多精品應用,音樂播放器市場更是如此,除了傳統(tǒng)單一的本地播放功能,Android平臺的音樂播放器已經(jīng)衍生出支持多格式、歌曲信息多合一提供、資源不僅依靠本地而且靠

20、移動互聯(lián)網(wǎng)提供、輔助功能完善的多種或集百家精粹,或有一技之長的精品播放器。</p><p><b>  QQ音樂</b></p><p>  QQ音樂是騰訊公司推出的網(wǎng)絡音樂平臺,是中國互聯(lián)網(wǎng)領域領先的正版數(shù)字音樂服務的領先平臺,始終走在音樂潮流最前端,向廣大用戶提供方便流暢的在線音樂和豐富多彩的音樂社區(qū)服務。QQ音樂的缺點是如果要享受全部功能需要付費開通VIP。&l

21、t;/p><p><b>  酷狗音樂</b></p><p>  酷狗是中國領先的數(shù)字音樂交互服務提供商,互聯(lián)網(wǎng)技術創(chuàng)新的領軍企業(yè),致力于為互聯(lián)網(wǎng)用戶和數(shù)字音樂產業(yè)發(fā)展提供最佳的解決方案??峁肪哂辛己玫囊魳沸ЧS富的網(wǎng)絡音樂資源,簡單的操作成為酷狗音樂吸引用戶的特色。酷狗音樂的缺點是廣告較多,且不能關閉。</p><p><b>  

22、天天動聽</b></p><p>  天天動聽(TTPOD)是上海水渡石信息技術有限公司開發(fā)音樂播放器,是一款功能強大、完全免費的音樂播放軟件。支持歌詞和歌曲圖片下載,皮膚隨心更換,更有炫麗震撼的可視化效果,同時預置豐富的均衡器效果,支持音效增強,簡潔人性化的操作,給追求音樂品質的你帶來了手機聽歌的全新體驗。天天動聽的缺點是在低內存手機上有明顯的卡頓。</p><p>  1.

23、3 目標及范圍</p><p>  基于以上前提,決定設計并開發(fā)一款輕量級的、界面美觀的、操作簡單的、免費的在線音樂播放器——波尼音樂。</p><p>  本軟件是一款Android在線音樂播放器,支持播放本地歌曲與網(wǎng)絡歌曲。系統(tǒng)主要實現(xiàn)的功能是播放本地/網(wǎng)絡歌曲,控制音樂的播放、暫停,支持歌詞與專輯封面顯示,自動從云端匹配并下載歌詞,擁有多元化的歌曲排行榜,可以根據(jù)歌曲或歌手搜索相關

24、歌曲,喜歡的歌曲可以一鍵下載到本地,支持睡眠模式、夜間模式等實用功能。復古的黑膠唱片設計,使用戶仿佛置身于二十世紀的音樂會現(xiàn)場,給用戶帶來充滿空靈感和現(xiàn)場感的體驗。軟件體積小,運行流暢,界面干凈無廣告,無多余權限,致力于提升用戶的聽歌體驗。</p><p>  實施本項目需要的硬件資源如下:</p><p>  x86架構電腦一臺(CPU Intel i5、內存8GB、存儲空間500GB)

25、</p><p>  Android智能手機一臺</p><p>  實施本項目需要的軟件資源如下:</p><p><b>  JDK 1.8</b></p><p>  Android SDK 23</p><p>  Gradle 2.0</p><p>  Andr

26、oid Studio 2.0[2] </p><p><b>  1.4 核心技術</b></p><p>  本項目用到的開源技術有:</p><p><b>  OkHttp</b></p><p>  (https://github.com/square/okhttp)</p>

27、<p>  HTTP是現(xiàn)在主流應用使用的網(wǎng)絡請求方式,用來交換數(shù)據(jù)和內容,有效的使用HTTP可以使APP變的更快和減少流量的使用。</p><p>  OkHttp是一個很棒HTTP客戶端:</p><p>  支持SPDY,可以合并多個到同一個主機的請求</p><p>  使用連接池技術減少請求的延遲(如果SPDY是可用的話)</p>

28、<p>  使用GZIP壓縮減少傳輸?shù)臄?shù)據(jù)量</p><p>  緩存響應避免重復的網(wǎng)絡請求</p><p>  系統(tǒng)主要利用OkHttp進行網(wǎng)絡請求,與服務器交換數(shù)據(jù)。</p><p><b>  Gson</b></p><p>  (https://github.com/google/gson)</

29、p><p>  Gson 是 Google 提供的用來在 Java 對象和 JSON 數(shù)據(jù)之間進行映射的 Java 類庫??梢詫⒁粋€ JSON 字符串轉成一個 Java 對象,或者反過來。</p><p><b>  功能:</b></p><p>  使用toJson()和fromJson()方法,就可以非常容易的完成Java對象到JSON的相互

30、轉換。</p><p>  能將預先存在的無法修改的對象與JSON互相轉換。</p><p>  支持Java泛型的使用。</p><p>  允許對象的個性化表達形式(representation)。</p><p>  支持各種復雜(擁有深繼承層次結構和大量使用泛型類型)的對象。</p><p>  系統(tǒng)主要利用G

31、son配合OkHttp將軟件從服務器獲取的原始數(shù)據(jù)進行快速解析。</p><p>  Android-Universal-Image-Loader</p><p>  (https://github.com/nostra13/Android-Universal-Image-Loader)</p><p>  Android-Universal-Image-Loade

32、r是一個開源的UI組件程序,該項目的目的是提供一個可重復使用的儀器為異步圖像加載,緩存和顯示。</p><p><b>  特點:</b></p><p><b>  多線程的圖像加載;</b></p><p>  圖片異步加載緩存機制,包括內存緩存(軟引用)及本地緩存;</p><p>  動態(tài)對

33、ImageLoader的配置(線程池的大小,HTTP選項,內存和光盤高速緩存方式,顯示圖像,以及其他選項);</p><p>  對加載過程實現(xiàn)監(jiān)聽和事件處理;</p><p>  能夠配置加載圖片的顯示選項,包括圖片圓角處理和加載完成顯示動畫等。</p><p>  系統(tǒng)主要利用Android-Universal-Image-Loader將歌手、專輯等圖片進行高效

34、的緩存,以提高應用性能,并解決用戶流量。</p><p>  第2章 Android音樂播放器需求分析</p><p>  2.1 功能性需求分析</p><p>  根據(jù)項目要達到的目標,需要制定系統(tǒng)的基本需求,接下來將根據(jù)不同模塊描述系統(tǒng)需求,并配合用例圖來描述系統(tǒng)的功能性需求。分為以下五個模塊來描述:本地音樂需求,在線音樂需求,正在播放(播放控制)需求,在

35、線搜索需求,擴展功能需求。</p><p>  2.1.1 本地音樂</p><p><b>  本地音樂列表的需求</b></p><p>  圖2-1 本地音樂用例圖</p><p><b>  播放</b></p><p><b>  參與者:使用者<

36、/b></p><p>  目標:使使用者可以播放所點擊歌曲</p><p>  前置條件:應用已啟動,且在“我的音樂”頁面</p><p>  基本事件流:a.使用者點擊需要播放的歌曲item</p><p>  b.播放器將播放使用者所點擊的歌曲</p><p><b>  分享</b>

37、</p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以將所選歌曲分享給好友</p><p>  前置條件:應用已啟動,且在“我的音樂”頁面,點擊“更多”按鈕</p><p>  基本事件流:a.使用者點擊需要分享歌曲item的“更多”按鈕,并點擊“分享”</p><

38、;p>  b.系統(tǒng)將提示使用者選擇分享方式</p><p><b>  設為鈴聲</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以將所選歌曲設置為手機鈴聲</p><p>  前置條件:應用已啟動,且在“我的音樂”頁面,點擊“更多”按鈕<

39、/p><p>  基本事件流:a.使用者點擊需要設為鈴聲歌曲item的“更多”按鈕,并點擊“設為鈴聲”</p><p>  b.播放器將所選歌曲設置為手機鈴聲</p><p><b>  刪除</b></p><p><b>  參與者:使用者</b></p><p>  目標:

40、使使用者可以將所選歌曲刪除</p><p>  前置條件:應用已啟動,且在“我的音樂”頁面,點擊“更多”按鈕</p><p>  基本事件流:a.使用者點擊需要刪除歌曲item的“更多”按鈕,并點擊“刪除”</p><p>  b.播放器將所選歌曲刪除并從播放列表中移除</p><p>  2.1.2 在線音樂</p><

41、;p>  當用戶點擊“在線音樂”中的歌曲排行榜時的需求</p><p>  圖2-2 在線歌單用例圖</p><p><b>  查看歌曲排行榜</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以查看所選的歌曲排行榜</p><

42、;p>  前置條件:應用已啟動,且在“在線音樂”頁面</p><p>  基本事件流:a.使用者點擊需要查看的歌曲排行榜item</p><p>  b.播放器將打開所選的歌曲排行榜</p><p>  c.歌曲排行榜顯示排行榜說明、更新時間、歌曲列表</p><p>  當用戶點擊進入歌曲排行榜后,點擊歌曲item的“更多”按鈕的需求

43、</p><p>  圖2-3 在線音樂用例圖</p><p><b>  播放</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以播放所點擊的網(wǎng)絡歌曲</p><p>  前置條件:應用已啟動,且在“歌曲排行榜”頁面</

44、p><p>  基本事件流:a.使用者點擊需要播放的網(wǎng)絡歌曲item</p><p>  b.播放器將播放使用者所點擊的網(wǎng)絡歌曲</p><p><b>  分享</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以將所選網(wǎng)絡歌曲的試

45、聽鏈接分享給好友</p><p>  前置條件:應用已啟動,且在“歌曲排行榜”頁面,點擊“更多”按鈕</p><p>  基本事件流:a.使用者點擊需要分享網(wǎng)絡歌曲item的“更多”按鈕,并點擊“分享”</p><p>  b.系統(tǒng)將提示使用者選擇分享方式</p><p><b>  查看歌手信息</b></p&g

46、t;<p><b>  參與者:使用者</b></p><p>  目標:使使用者可以查看所選歌曲的歌手的詳細信息</p><p>  前置條件:應用已啟動,且在“歌曲排行榜”頁面,點擊“更多”按鈕</p><p>  基本事件流:a.使用者點擊需要查看歌手信息的網(wǎng)絡歌曲item的“更多”按鈕,并點擊“查看歌手信息”</p&

47、gt;<p>  b.播放器將跳轉到“歌手信息”界面,顯示歌手圖片、身高、體重、簡介等信息</p><p><b>  下載</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以將所選網(wǎng)絡歌曲及其匹配的歌詞下載到本地</p><p>  前

48、置條件:應用已啟動,且在“歌曲排行榜”頁面,點擊“更多”按鈕</p><p>  基本事件流:a.使用者點擊需要下載網(wǎng)絡歌曲item的“更多”按鈕,并點擊“下載”</p><p>  b.播放器將下載使用者所選網(wǎng)絡歌曲及其匹配的歌詞,并在下載完成后自動添加到“我的音樂”列表</p><p>  2.1.3 在線搜索</p><p><

49、b>  在線搜索時的需求</b></p><p>  圖2-4 在線搜索用例圖</p><p><b>  搜索</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以根據(jù)輸入的歌曲名/歌手名搜索相關歌曲</p><p

50、>  前置條件:應用已啟動,且在“搜索”界面,系統(tǒng)已連接至互聯(lián)網(wǎng)</p><p>  基本事件流:a.使用者輸入歌曲名/歌手名并點擊搜索</p><p>  b.播放器將搜索結果以列表的形式展示</p><p><b>  播放</b></p><p>  同在線音樂“播放”需求</p><p&

51、gt;<b>  分享</b></p><p>  同在線音樂“分享”需求</p><p><b>  下載</b></p><p>  同在線音樂“分享”需求</p><p>  2.1.4 播放控制</p><p><b>  播放控制的需求</b>

52、;</p><p>  圖2-5 播放控制用例圖</p><p><b>  播放/暫停</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以播放/暫停當前歌曲</p><p>  前置條件:應用已啟動,且在“正在播放”頁面<

53、;/p><p>  基本事件流:a.使用者點擊播放/暫停按鈕</p><p>  b.播放器將播放/暫停當前歌曲</p><p><b>  上一曲</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以切換到上一首歌曲</p&

54、gt;<p>  前置條件:應用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者點擊上一曲按鈕</p><p>  b.播放器將切換到上一首歌曲</p><p><b>  下一曲</b></p><p><b>  參與者:使用者</b></p>

55、<p>  目標:使使用者可以切換到下一首歌曲</p><p>  前置條件:應用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者點擊下一曲按鈕</p><p>  b.播放器將切換到下一首歌曲</p><p><b>  播放模式</b></p><p>&

56、lt;b>  參與者:使用者</b></p><p>  目標:使使用者可以切換播放模式(全部循環(huán)/隨機播放/單曲循環(huán))</p><p>  前置條件:應用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者點擊切換播放模式按鈕</p><p>  b.播放器將切換播放模式</p><

57、p><b>  顯示專輯封面</b></p><p><b>  參與者:使用者</b></p><p>  目標:使正在播放界面可以顯示當前歌曲的專輯封面,并添加旋轉動畫</p><p>  前置條件:應用已啟動,且在“正在播放”頁面,且當前正在播放的歌曲包含專輯封面</p><p>  基

58、本事件流:播放器播放歌曲時自動顯示其專輯封面,沒有封面的歌曲顯示默認封面</p><p><b>  顯示歌詞</b></p><p><b>  參與者:使用者</b></p><p>  目標:使正在播放界面可以顯示當前歌曲的歌詞,并滾動顯示</p><p>  前置條件:應用已啟動,在“正在播

59、放”頁面,當前正在播放的歌曲包含歌詞</p><p>  基本事件流:播放器播放歌曲時自動顯示其歌詞,并根據(jù)歌曲播放進度自動滾動到相應位置,沒有歌詞的歌曲參見“自動搜索歌詞”需求</p><p><b>  自動搜索歌詞</b></p><p><b>  參與者:使用者</b></p><p> 

60、 目標:如果當前播放的歌曲沒有歌詞,則從網(wǎng)絡搜索并下載歌詞</p><p>  前置條件:應用已啟動,且在“正在播放”頁面,且當前正在播放的歌曲不包含歌詞,系統(tǒng)已連接至互聯(lián)網(wǎng)</p><p>  基本事件流:播放器播放歌曲時如果沒有歌詞,則自動從網(wǎng)絡搜索并下載,下載完成后自動顯示,同“顯示歌詞”需求</p><p><b>  播放進度調節(jié)</b&g

61、t;</p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以調節(jié)當前播放歌曲的進度</p><p>  前置條件:應用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者拖拽播放進度條</p><p>  b.播放器自動跳轉到用戶選擇的位置&

62、lt;/p><p><b>  音量調節(jié)</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以調節(jié)音量</p><p>  前置條件:應用已啟動,且在“正在播放”頁面</p><p>  基本事件流:a.使用者拖拽音量進度條</

63、p><p>  b.系統(tǒng)自動調節(jié)音量</p><p>  2.1.5 擴展功能</p><p>  播放器附帶的擴展功能需求</p><p>  圖2-6 擴展功能用例圖</p><p><b>  天氣</b></p><p><b>  參與者:使用者</

64、b></p><p>  目標:使播放器可以自動定位并顯示當前城市的實時天氣信息</p><p>  前置條件:應用已啟動,系統(tǒng)已連接至互聯(lián)網(wǎng)</p><p>  基本事件流:a.使用者啟動應用</p><p>  b.播放器將自動定位并顯示當前城市的實時天氣信息,包括天氣、城市、風力、濕度等信息</p><p>

65、;<b>  功能設置</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以自定義播放器的偏好設置</p><p>  前置條件:應用已啟動,打開設置界面</p><p>  基本事件流:a.使用者點擊設置項</p><p>  

66、b.播放器自動保存所選設置項,包括是否允許移動網(wǎng)絡播放在線歌曲、音效調節(jié)等</p><p><b>  夜間模式</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以切換夜間/日間模式</p><p>  前置條件:應用已啟動</p>&l

67、t;p>  基本事件流:a.使用者點擊夜間模式</p><p>  b.播放器自動切換到夜間/日間模式,不影響當前播放的歌曲</p><p><b>  定時停止播放</b></p><p><b>  參與者:使用者</b></p><p>  目標:使使用者可以定時停止播放歌曲并退出應用&

68、lt;/p><p>  前置條件:應用已啟動</p><p>  基本事件流:a.使用者點擊定時停止播放</p><p>  b.播放器彈出對話框讓使用者設定時間</p><p>  c.到達使用者設置的事件后自動停止播放并退出應用</p><p><b>  關于說明</b></p>

69、<p><b>  參與者:使用者</b></p><p>  目標:使使用者可以查看播放器的關于說明</p><p>  前置條件:應用已啟動</p><p>  基本事件流:a.使用者點擊關于</p><p>  b.播放器跳轉到關于界面,包含應用版本、檢查更新、推薦給朋友、作者信息等</p>

70、<p><b>  啟動界面</b></p><p><b>  參與者:使用者</b></p><p>  目標:使播放器定期更新啟動界面圖</p><p>  前置條件:應用已啟動,系統(tǒng)已連接至互聯(lián)網(wǎng)</p><p>  基本事件流:a.使用者啟動應用</p><

71、p>  b.播放器檢查本地是否已經(jīng)下載了啟動界面圖片,如果沒有,則從網(wǎng)絡后臺下載;如果已經(jīng)下載,則直接展示啟動畫面圖</p><p>  2.2 非功能性需求分析</p><p>  2.2.1 軟件性能指標</p><p>  內存占用:30~40MB</p><p>  CPU占用:5~10%</p><p&

72、gt;<b>  啟動時間:1~2s</b></p><p>  流量消耗:每次運行消耗1000KB以內(下載流量除外)</p><p><b>  FPS:25~30</b></p><p>  2.2.2 軟件兼容性</p><p>  系統(tǒng):Android 4.0或更高</p>

73、<p>  RAM:128MB或更高</p><p>  ROM:256MB或更高</p><p>  CPU架構:ARM、x86、MIPS</p><p>  第3章 Android音樂播放器系統(tǒng)概要設計</p><p>  3.1 主要設計內容</p><p>  系統(tǒng)設計了一個Android平臺的

74、在線音樂播放器,基于Native方式進行開發(fā)。采用MVC框架,將項目的視圖層、數(shù)據(jù)層和邏輯層分離組織,將業(yè)務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯。MVC模式圖如下:</p><p>  圖3-1 MVC模式</p><p>  系統(tǒng)基于Android開源平臺,使用Java語言編寫,視圖層使用xml實現(xiàn)。使用Service后臺播放音樂,通過B

75、inder綁定Service并設置回調的方式實現(xiàn)前臺界面(Activity)到后臺服務(Service)之間的交互。系統(tǒng)和服務器采用json數(shù)據(jù),通過OkHttp+Gson進行數(shù)據(jù)的傳輸和解析。</p><p>  服務器為百度在線音樂服務,通過暴露的rest API接口,使得客戶端可以從服務器獲得在線音樂數(shù)據(jù)。</p><p><b>  3.2 設計思想</b>

76、</p><p>  系統(tǒng)由本地音樂文件與百度音樂服務器提供播放源,前臺界面展示播放效果。</p><p><b>  圖3-2 設計思想</b></p><p>  前臺界面包括Activity和Fragment,Activity通過bindService方法可以得到Service的實例,然后通過Service的方法設置Activity的回調

77、,Activity收到回調事件后抄送給Fragment。</p><p>  在線音樂部分通過OkHttp+Gson從百度音樂服務獲取并解析數(shù)據(jù),圖片緩存通過Universal-Image-Loader的三級緩存實現(xiàn)。</p><p><b>  3.3 系統(tǒng)框架</b></p><p>  系統(tǒng)主要分為后臺服務,數(shù)據(jù)層,業(yè)務層,前臺界面四個

78、層次,后臺服務主要提供播放邏輯控制,數(shù)據(jù)層包括本地數(shù)據(jù)和服務器數(shù)據(jù),業(yè)務層是各個功能模塊,前臺界面展示當前播放歌曲的信息。</p><p>  圖3-3 系統(tǒng)框架圖</p><p><b>  3.4 系統(tǒng)功能</b></p><p>  系統(tǒng)主要包括本地音樂,在線音樂等幾大功能,功能如下圖:</p><p><

79、b>  圖3-4 系統(tǒng)功能</b></p><p>  3.4.1 本地音樂</p><p>  本地音樂功能包括播放,分享,設為鈴聲等功能,具體功能如下圖:</p><p><b>  圖3-5 本地音樂</b></p><p>  3.4.2 在線音樂</p><p> 

80、 在線音樂功能包括播放,分享,查看歌手信息等功能,具體功能如下:</p><p><b>  圖3-6 在線音樂</b></p><p>  3.4.3 在線搜索</p><p>  在線搜索功能包括搜索,播放,分享,下載功能,具體功能如下:</p><p><b>  圖3-7 在線搜索</b>

81、</p><p>  3.4.4 播放控制</p><p>  播放控制功能主要包括上一曲/下一曲,播放進度調節(jié),播放模式切換等,具體功能如下圖:</p><p><b>  圖3-8 播放控制</b></p><p>  3.4.5 擴展功能</p><p>  擴展功能包括夜間模式,定時關

82、閉,自動更新等功能,具體功能如下圖:</p><p><b>  圖3-9 擴展功能</b></p><p><b>  3.5 流程設計</b></p><p>  系統(tǒng)主界面顯示本地音樂列表,在線歌單列表,快速播放控制以及側邊菜單欄,點擊本地音樂可以播放,點擊歌單可以進入歌單詳情,點擊快速播放控制條可以進入正在播放界

83、面,側邊菜單欄包括一些附加功能,系統(tǒng)總體流程圖如下:</p><p>  圖3-10 流程設計圖</p><p>  第4章 Android音樂播放器存儲設計</p><p><b>  4.1 本地存儲</b></p><p>  該系統(tǒng)支持用戶自定義偏好設置,因此需要設計本地存儲。Android目前有以下三種存儲

84、方式。</p><p>  使用SharedPreferences存儲數(shù)據(jù)</p><p>  適用范圍:保存少量的數(shù)據(jù),且這些數(shù)據(jù)的格式非常簡單:字符串型、基本類型的值。比如應用程序的各種配置信息(如是否打開音效、是否使用震動效果、小游戲的玩家積分等),解鎖口令密碼等。</p><p>  核心原理:保存基于XML文件存儲的key-value鍵值對數(shù)據(jù),通常用來存

85、儲一些簡單的配置信息。通過DDMS的File Explorer面板,展開文件瀏覽樹,很明顯SharedPreferences數(shù)據(jù)總是存儲在/data/data/<package name>/shared_prefs目錄下。SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過SharedPreferences.edit()獲取的內部接口Editor對象實現(xiàn)。 SharedPreference

86、s本身是一 個接口,程序無法直接創(chuàng)建SharedPreferences實例,只能通過Context提供的getSharedPreferences(String name, int mode)方法來獲取SharedPreferences實例。</p><p><b>  文件存儲數(shù)據(jù)</b></p><p>  核心原理: Context提供了兩個方法來打開數(shù)據(jù)文件里的

87、文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),這兩個方法第一個參數(shù) 用于指定文件名,第二個參數(shù)指定打開文件的模式。</p><p>  SQLite存儲數(shù)據(jù)</p><p>  SQLite是輕量級嵌入式數(shù)據(jù)庫引擎,它支持 SQL 語言,并且只利用很少的內

88、存就有很好的性能?,F(xiàn)在的主流移動設備像Android、iPhone等都使用SQLite作為復雜數(shù)據(jù)的存儲引擎,在為移動設備開發(fā)應用程序時,也許就要使用到SQLite來存儲大量的數(shù)據(jù),所以就需要掌握移動設備上的SQLite開發(fā)技巧。</p><p><b>  結論</b></p><p>  根據(jù)上面的分析,只需要存儲一些基本配置,因此只需要選擇一種輕量級的存儲方式即

89、可,所以,選擇使用SharedPreferences來存儲數(shù)據(jù)。將需要保存的數(shù)據(jù)以key-value形式寫入xml文件,文件大小小于1KB。</p><p><b>  保存的數(shù)據(jù)格式如下</b></p><p><b>  4.2 遠程存儲</b></p><p>  該系統(tǒng)需要查看在線歌曲排行榜、搜索在線歌曲,因此需

90、要遠程服務器存儲數(shù)據(jù),這里遠程服務器不在本設計的范疇之內,因此這里不過多討論。</p><p>  第5章 Android音樂播放器詳細設計與實現(xiàn)</p><p>  本章將根據(jù)系統(tǒng)概要設計,對每個部分進行詳細設計,給出代碼實現(xiàn),代碼分析,并對期間遇到的問題進行詳細討論。</p><p>  5.1 系統(tǒng)架構詳細設計</p><p>  

91、5.1.1 系統(tǒng)架構方式分析</p><p><b>  現(xiàn)狀</b></p><p>  Android系統(tǒng)App目前有三種主流的架構方式:</p><p><b>  Native</b></p><p><b>  原生方式</b></p><p&g

92、t;<b>  Html5</b></p><p>  萬維網(wǎng)的核心語言、標準通用標記語言下的一個應用超文本標記語言(HTML)的第五次重大修改。</p><p>  React Native</p><p>  React Native使你能夠在Javascript和React的基礎上獲得完全一致的開發(fā)體驗,構建世界一流的原生APP。<

93、/p><p>  React Native著力于提高多平臺開發(fā)的開發(fā)效率 —— 僅需學習一次,編寫任何平臺。(Learn once, write anywhere)</p><p>  Facebook已經(jīng)在多項產品中使用了React Native,并且將持續(xù)地投入建設React Native。</p><p><b>  分析</b></p

94、><p>  三種架構方式的對比分析:</p><p><b>  開發(fā)方式</b></p><p>  代碼結構: React Native更為合理,組件化程度高</p><p>  UI布局:Web布局靈活度 > React Native > Native</p><p>  UI截面

95、圖:React Native使用的是原生組件</p><p>  路由/Navigation:React Native & Native更勝一籌</p><p>  第三方生態(tài)鏈:Native modules + js modules = React Native modules</p><p><b>  性能 & 體驗</b>

96、;</p><p>  內存:Native最少;因為React Native含有框架,所以相對較高,但是后期平穩(wěn)后會優(yōu)于Native。</p><p>  CPU:React Native居中。</p><p>  動畫:React Native動畫需求基本滿足。</p><p>  安裝包體積:React Native框架打包后,811KB

97、。相比熱更新,可以忽略和考慮資源規(guī)劃。</p><p>  Big ListView</p><p>  真機體驗:Native >= React Native > H5/Hybrid</p><p><b>  更新 & 維護</b></p><p>  更新能力: H5/Hybird > R

98、eact Native > Native</p><p>  維護成本: H5/Hybird <= React Native < Native</p><p>  React Native定制難度相比Native有些大;但是具備跨平臺能力和熱更新能力。</p><p><b>  結論</b></p><p

99、>  考慮到項目并不需要熱更新,偏向于離線使用,播放界面專輯封面和歌詞使用了大量動畫,因此,綜合考慮決定使用Native架構方式開發(fā)本項目。</p><p>  5.1.2 系統(tǒng)框架分析</p><p>  論文實現(xiàn)了一個個性化的音樂播放器。在Android中,Activity主要負責前臺頁面的展示,Service主要負責需要長期運行的任務。眾所周知,音樂播放需要支持應用退出后繼續(xù)

100、播放,因此不能在Activity中直接播放音樂,因為這樣的話界面退出后音樂就停止播放了。</p><p>  使用Service播放音樂</p><p>  Android SDK提供了Service,用于類似*nix守護進程或者windows的服務。</p><p>  Service有兩種類型:</p><p>  本地服務(Local

101、Service):用于應用程序內部</p><p>  遠程服務(Remote Sercie):用于Android系統(tǒng)內部的應用程序之間</p><p>  前者用于實現(xiàn)應用程序自己的一些耗時任務,比如查詢升級信息,并不占用應用程序比如Activity所屬線程,而是單開線程后臺執(zhí)行,這樣用戶體驗比較好。</p><p>  后者可被其他應用程序復用,比如天氣預報服務

102、,其他應用程序不需要再寫這樣的服務,調用已有的即可。</p><p>  這里不需要其他程序共享Service,因此采用本地服務。</p><p>  前臺界面(Activity)與后臺服務(Service)通信</p><p>  Android中的四大組件是相互獨立的,因此必須設計一個框架來實現(xiàn)前臺界面(Activity)和后臺服務(Service)的相互。&l

103、t;/p><p>  Activity和Service的通信有以下幾種方式:</p><p>  回調接口的方式 。當Activity通過調用bindService(Intent service, ServiceConnection conn,int flags),可以得到一個Service的一個對象實例,然后就可以訪問Service中的方法,完成Activity→Service的通信;通過為

104、Service添加監(jiān)聽器的方法,Service作為被觀察者,Activity作為觀察者,當有新事件時,Service通知Activity,完成Service→Activity的通信。這種方式適合Activity與Service交互比較頻繁的情況。</p><p>  通過廣播接收者。在Service中執(zhí)行完耗時操作后,將結果以廣播的形式發(fā)送,在Activity中注冊廣播,接收到結果后更新UI。因為耗時的操作結果不

105、需要以Handler的方式發(fā)送到主線程,可以直接在子線程中發(fā)送廣播,接收者始終運行在主線程中。完成Service→Activity的通信。同樣,Activity將事件以廣播的方式發(fā)送給Service,完成Activity→Service的通信。這種方式適合Activity與Service交互不太頻繁的情況。</p><p>  通過startService方式。Activity通過startService將事件發(fā)

106、送到Service的onStartCommand()方法,然后Service執(zhí)行相應的操作,完成Activity→Service的通信;Service通過廣播將事件發(fā)送到Activity,Activity中需注冊廣播接收器,完成Service→Activity的通信。這種方式適合Activity與Service交互不太頻繁的情況。</p><p>  經(jīng)過以上分析,由于音樂播放前臺界面(Activity)和后臺服

107、務(Service)需要頻繁的交互,因此應選擇第一種通信方式。</p><p>  模塊(Fragment)與后臺服務(Service)通信</p><p>  應用在主窗口(Activity)中擁有三個模塊(Fragment),“我的音樂”,“在線音樂”和“正在播放”模塊,其中“我的音樂”和“正在播放”需要和后臺服務頻繁通信。有了前面的Activity和Service的通信方法,需要將A

108、ctivity作為一個中介,通過Activity將Service的實例共享給Fragment,Activity將Service的回調抄送給Fragment,間接完成Fragment和Service的通信。</p><p><b>  詳細代碼實現(xiàn):</b></p><p>  Activity綁定Service,獲得Service的實例,并綁定監(jiān)聽器</p>

109、;<p>  Fragment通過生命周期方法onAttach()獲取Activity的實例,進而獲得Service的實例</p><p>  Service通過監(jiān)聽器將時間發(fā)送給Activity,Activity收到事件后同時將事件抄送給Fragment</p><p>  5.1.3 網(wǎng)絡請求框架分析</p><p>  網(wǎng)絡請求框架主要是向服務

110、器請求數(shù)據(jù)。大多數(shù)的Android應用程序都會使用HTTP協(xié)議來發(fā)送和接收網(wǎng)絡數(shù)據(jù),而Android中主要提供了兩種方式來進行HTTP操作,HttpURLConnection和HttpClient。這兩種方式都支持HTTPS協(xié)議、以流的形式進行上傳和下載、配置超時時間、IPv6、以及連接池等功能。</p><p>  HttpClient</p><p>  DefaultHttpClie

111、nt和AndroidHttpClient都是HttpClient具體的實現(xiàn)類,它們都擁有眾多的API,而且實現(xiàn)比較穩(wěn)定,bug數(shù)量也很少。</p><p>  但同時也由于HttpClient的API數(shù)量過多,使得很難在不破壞兼容性的情況下對它進行升級和擴展,所以目前Android團隊在提升和優(yōu)化HttpClient方面的工作態(tài)度并不積極。</p><p>  HttpURLConnect

112、ion</p><p>  HttpURLConnection是一種多用途、輕量級的HTTP客戶端,使用它來進行HTTP操作可以適用于大多數(shù)的應用程序。雖然HttpURLConnection的API提供的比較簡單,但是同時這也使得可以更加容易地去使用和擴展它。</p><p><b>  結論</b></p><p>  在Android 2.

113、2版本之前,HttpClient擁有較少的bug,因此使用它是最好的選擇。</p><p>  而在Android 2.3版本及以后,HttpURLConnection則是最佳的選擇。它的API簡單,體積較小,因而非常適用于Android項目。壓縮和緩存機制可以有效地減少網(wǎng)絡訪問的流量,在提升速度和省電方面也起到了較大的作用。對于新的應用程序應該更加偏向于使用HttpURLConnection。</p>

114、;<p>  系統(tǒng)的網(wǎng)絡請求框架是基于OkHttp,并對OkHttp進行了封裝,使它更易使用。OkHttp內部實現(xiàn)了Apach Http Client和Http Url Connection,在Android SDK API 9以下使用Http Client,Android SDK API 9以上使用輕量級的Http框架HttpUrlConnection。</p><p><b>  關鍵

115、代碼</b></p><p>  5.1.4 數(shù)據(jù)緩存框架</p><p>  數(shù)據(jù)緩存框架負責將常用的數(shù)據(jù)緩存在內存(Memory)中,方便系統(tǒng)隨時使用。這里主要講解歌曲專輯封面圖片的緩存實現(xiàn)。由于切換歌曲后需要將專輯封面圖片加載到內存中,而這一過程是一個耗時操作,尤其是專輯封面圖片較大時,可以感覺到界面有明顯的卡頓,而如果每次切換歌曲都要加載這么久的話,會大大降低用戶體驗

116、。</p><p>  加載Bitmap耗時的原因</p><p>  Android API 有個方法來測量bitmap的大小:</p><p>  通過這個方法,可以獲取到一張 Bitmap 在運行時所占用的內存。比如,一張 522x686 的 PNG 圖片,把它放到 drawable-xxhdpi 目錄下,在三星s6上加載,占用內存2547360B,即約2.5

117、MB,這對于內存有限的Android移動設備來說已經(jīng)是很大了。</p><p>  解決問題的思路是,加載圖片時按需加載,需要多大,就加載多大的圖片,以縮短加載時間,避免OOM,將常用的圖片緩存起來,盡量減少加載次數(shù),提高用戶體驗,因此應該使用LRU緩存技術,將加載完成的圖片緩存起來。LruCache使用一個LinkedHashMap簡單的實現(xiàn)內存的緩存,沒有軟引用,都是強引用。如果添加的數(shù)據(jù)大于設置的最大值,就

118、刪除最先緩存的數(shù)據(jù)來調整內存,以達到最常用的總是不會被回收。</p><p><b>  關鍵代碼</b></p><p>  5.2 功能詳細設計</p><p>  系統(tǒng)包含本地音樂,在線音樂,在線搜索,播放控制,附加功能五大功能模塊,本地音樂包含播放,分享,設置鈴聲,刪除等功能;在線音樂包含播放,分享,查看歌手信息等功能;在線搜索包含搜

119、索,播放,分享等功能,播放控制包含上一曲/下一曲,切換播放模式,播放進度調節(jié),顯示專輯封面、歌詞,自動搜索歌詞等功能;附加功能包含夜間模式,定時停止播放,功能設置等功能。下面將對主要的功能進行詳細設計:</p><p>  5.2.1 本地音樂詳細設計</p><p>  進入播放器主界面將以列表的形式顯示本地下載的音樂,音樂信息包含標題,歌手,專輯信息,點擊歌曲可以播放,標記正在播放的

120、歌曲,點擊列表右側的更多按鈕可以選擇更多功能,如分享,設為鈴聲等。</p><p>  本地音樂相關類詳細說明</p><p>  表5-1 本地音樂相關類詳細說明</p><p><b>  本地音樂設計與實現(xiàn)</b></p><p>  表5-2 本地音樂設計與實現(xiàn)</p><p><b

121、>  本地音樂界面設計</b></p><p>  圖5-1 本地音樂界面設計</p><p>  5.2.2 在線音樂詳細設計</p><p>  進入播放器主界面,點擊在線音樂標簽,展示在線歌單列表,如熱歌榜,新歌榜等,點擊歌單進入歌單詳情,歌單詳情包括歌單介紹,更新時間,歌單包含的歌曲列表,點擊歌曲可以播放,點擊列表右側更多按鈕可以分享,下

122、載等。</p><p>  在線音樂相關類詳細說明</p><p>  表5-3 在線音樂相關類詳細說明</p><p><b>  在線音樂設計與實現(xiàn)</b></p><p>  表5-4 在線音樂設計與實現(xiàn)</p><p><b>  在線音樂界面設計</b></p

123、><p>  圖5-2在線音樂界面設計(1) 圖5-3在線音樂界面設計(2)</p><p>  5.2.3 在線搜索詳細設計</p><p>  啟動應用,點擊搜索按鈕,進入搜索界面,輸入歌曲相關信息,如歌手名,歌曲名等,點擊搜索,可以搜索相關歌曲,搜索結果以列表形式展示,點擊可以播放,點擊列表右側可以分享,下載等。</p&

124、gt;<p>  在線搜索相關類詳細說明</p><p>  表5-5 在線搜索相關類詳細說明</p><p><b>  在線搜索設計與實現(xiàn)</b></p><p>  表5-6 在線搜索設計與實現(xiàn)</p><p><b>  在線搜索界面設計</b></p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論