安卓仿網易雲介面的本地音樂播放器的實現
前言:讀研究生之前,老闆讓學IOS,老老實實看了一個學期的IOS(在這裡強烈安利一下騰訊課堂的小碼哥IOS視訊,基本剛開始只需要10塊買第一部,後面的就可以用可視幣來兌換了,質量還不錯,能學到很多東西,看三部基本IOS就能入門了),結果開學提前兩個月被叫去幹活,一開會,說IOS暫時沒專案,讓我學安卓,我。。。好了好了,看了幾天郭霖大神的《第一行程式碼》,然後跟著做了最後的一個專案:酷歐天氣。就想著自己做一個東西,於是就做了一個模仿網易雲音樂的本地音樂播放器。具體介面如下:
實現的主要功能有:本地音樂的掃描顯示、音樂的播放、音樂播放順序的設定(隨機、順序,單曲迴圈等)、通知欄顯示歌曲播放資訊、通過通知欄控制音樂的播放、仿網易雲音樂中間膠片旋轉和背景虛化效果等。
用到的主要知識有:
1、服務的知識:要想在後臺播放音樂,就必須用到服務,具體就是在服務中,讓MediaPlayer播放,然後通知Binder介面,在活動中呼叫服務中的函式控制音樂的播放。這個知識在《第一行程式碼》中說的很清楚了,就不細說了。
2、MediaPlayer:安卓提供的控制音樂音樂播放的,挺簡單的,網上有很多教程。
3、內容提供器:需要用內容提供器獲得本地音樂的各種資訊,包括歌曲名稱,作者,路徑,專輯圖片等。
4、廣播:在音樂播放完的時候,需要利用廣播通知活動,控制播放下一首歌,此外,在用通知欄控制音樂播放的時候,也會用到廣播。我這裡是通過動態註冊廣播的方式實現的,因為廣播類是定義在活動中的內部類,要在內部類中訪問一些活動類中的變數。
5、通知:這個是真花費了很多功夫才學會的,因為想要通過通知控制音樂的播放,就要自定義通知欄,要用到remoteview,然後想要監聽通知中按鈕的點選事件,只能讓remoteview傳送廣播,然後讓活動監聽控制音樂的播放。我這裡是在監聽音樂播放完成後廣播中一起處理的,一定要注意,在註冊廣播的時候,要addAction,然後在remoteview設定Intent時,要設定Intent的action,這樣才能監聽到。
7、多執行緒:在6中說到,專輯圖片的虛化和圓化操作比較耗時,最好是放到子執行緒中進行,但是問題又來了,在子執行緒中操作的時候,有可能你圖片還沒生成,就會切到下一曲了,這樣在不同專輯圖片過度的時候,就會有很卡的感覺。我這裡採用了一種折中的辦法,在使用者按下下一首,上一首等切歌按鍵的時候,先讓中間膠片旋轉暫停,然後等圖片在子執行緒中完全生成了,設定後背景和膠片圖片了,再讓膠片繼續旋轉,這樣就能很大程度上緩解卡的問題了。
大概用到的知識就是這些了吧,具體的實現細節在原始碼中詳細看吧,原始碼下載地址: