數(shù)據(jù)源
本來(lái)只想重新練練RecyclerView的,一不小心又弄得復(fù)雜了。。。
無(wú)意中想起來(lái)搞個(gè)網(wǎng)絡(luò)音樂(lè)播放器,本地的就算了,目前沒(méi)時(shí)間去仔細(xì)弄了,但是這個(gè)沒(méi)有多深入的邏輯控制,只是簡(jiǎn)單的播放邏輯,這也是很折磨人啊,大家看看就好了。于是上網(wǎng)搜了一下免費(fèi)的音樂(lè)api,誤打誤撞找到一個(gè)用Java寫(xiě)的幾個(gè)國(guó)內(nèi)音樂(lè)搜索(QQ音樂(lè),酷狗,蝦米,網(wǎng)易云音樂(lè))接口
https://github.com/Qrilee/MusicuuApi
請(qǐng)直接拷貝代碼到你的工程里去,jar包也直接拷到libs下。
其中網(wǎng)易云好像被封了,訪問(wèn)不了,反正經(jīng)過(guò)我的測(cè)試返回404信息。
在WyMusic、NetUtil類中,導(dǎo)入的sun.misc.BASE64Encoder 這個(gè)工具類必須換為 android.util.Base64,因?yàn)閍ndroid中沒(méi)有BASE64Encoder,取而代之的是Base64。其中的方法也按要需求調(diào)用,WyMusic.java中,我是這樣使用的
String retval = Base64.encodeToString(md5Bytes,Base64.DEFAULT);
?WyMusic這個(gè)是網(wǎng)易云音樂(lè)的類,還有NetUtil類中也用到了Base64工具類,如果你想用的話請(qǐng)注意這點(diǎn)喲。
效果圖
好吧,直接看我寫(xiě)的播放器效果吧。
有一些圖標(biāo)是自己畫(huà)的,你們看得出來(lái)嗎?好吧,肯定看不出來(lái)。啦啦啦。播放控件中的播放順序四個(gè)模式的圖標(biāo)和右邊的播放列表圖標(biāo)是我用AI畫(huà)的,實(shí)在是覺(jué)得網(wǎng)上的圖標(biāo)太丑了,顏色還要自己調(diào),不如直接用AI畫(huà)出來(lái),簡(jiǎn)單的線條UI還是能弄出來(lái)的
搜索時(shí)間長(zhǎng)也是這個(gè)搜索接口的原因,可能數(shù)據(jù)早已經(jīng)通過(guò)網(wǎng)絡(luò)獲取到了,但解析時(shí)間過(guò)長(zhǎng)吧,看原作者的后續(xù)更新吧。還有歌詞的功能,這里就沒(méi)去弄了,畢竟不是專業(yè)的播放器。我特別喜歡網(wǎng)易云音樂(lè),可惜用這個(gè)接口目前我弄不到它的數(shù)據(jù),網(wǎng)上其他方法我也找過(guò)了,幾乎都是同一個(gè)方法(POST方式,添加請(qǐng)求頭參數(shù)),這個(gè)也不例外,被服務(wù)拒絕了還是地址換了?有誰(shuí)知道的嗎
感覺(jué)移動(dòng)端的邏輯問(wèn)題很難纏,頁(yè)面效果實(shí)現(xiàn)相比之下就了,現(xiàn)在那么多成熟又漂亮的第三方視圖和動(dòng)畫(huà),我們只需要稍微修改就能滿足開(kāi)發(fā)需求吧。
由于新聞數(shù)據(jù)api的數(shù)據(jù)有限,不像今日頭條、新浪新聞等專業(yè)大戶有海量數(shù)據(jù),由于這里只是業(yè)余的程序,只需要刷出來(lái)固定的十幾條最新數(shù)據(jù)就行了。
這些都是自己一字一句碼出來(lái)效果,界面效果不是問(wèn)題,就是邏輯關(guān)系搞得很蛋疼??。本來(lái)還好的Fragment,越來(lái)越臃腫,多少行代碼我就不說(shuō)了,簡(jiǎn)直扎心了,還好我的MainActivity,只有不到100行。因?yàn)镸ainActivity只管著幾個(gè)Fragment的切換功能,作為Fragment的容器,幾乎沒(méi)有耗時(shí)的代碼。
看官們覺(jué)得咋樣?沒(méi)有用DataBinding這些東西,雖然早就聽(tīng)聞了,一看還有點(diǎn)難度,就放著了,以后肯定會(huì)用上的吧(現(xiàn)在有更好用的ButterKnife了,以后就用它了)。
令我滿意的是播放順序這塊的邏輯沒(méi)毛病,其他的東西就隨便看看吧,哈哈。其中加載動(dòng)畫(huà)和播放進(jìn)度條用是自己寫(xiě)的控件,Seekbar本來(lái)也是用自己的,后來(lái)出現(xiàn)bug了,不想浪費(fèi)時(shí)間就用原生的了。代碼有點(diǎn)雜亂,我就不貼了。這里給個(gè)安裝包大家瞧瞧就行了,
https://github.com/Ccapton/EasyPlayer/blob/master/%E4%B8%AA%E6%80%A7%E5%8C%96.apk
至于JNI開(kāi)發(fā),我還沒(méi)怎么去接觸誒,似乎都是要在移動(dòng)端高效運(yùn)行的程序才要?比如直播類等軟件需要高效壓縮攝像頭采集的數(shù)據(jù)的算法,這就需要更接近底層的C與C++才能做到;還有大名鼎鼎的視頻處理項(xiàng)目FFmpeg,本來(lái)在桌面端的項(xiàng)目,用于Android移動(dòng)端簡(jiǎn)直不要太變態(tài),很多播放器就用到了它的代碼吧。需要保密的程序算法,要用到打包的so庫(kù)來(lái)防止被反編譯。
好了,這篇文章就到這了,主要是自己寫(xiě)了這么一個(gè)功能單一程序,實(shí)際對(duì)大家有用的東西估計(jì)就是下面的鏈接了。那么下期見(jiàn)。
用到的一些庫(kù)、框架
音樂(lè)數(shù)據(jù)源 MusicuuApi:https://github.com/Qrilee/MusicuuApi
圖片加載 Glide:https://github.com/bumptech/glide
數(shù)據(jù)解析 Gson:https://github.com/google/gson
網(wǎng)絡(luò)通信 Volley :https://github.com/mcxiaoke/android-volley
網(wǎng)絡(luò)通信 Okhttp:https://github.com/square/okhttp
瀏覽器控件 AgentWeb:https://github.com/Justson/AgentWeb
上下拉刷新控件 SmartRefreshLayout: https://github.com/scwang90/SmartRefreshLayout
左右滑動(dòng)刪除列表項(xiàng)控件 Swipemenulistview:
https://github.com/baoyongzhang/SwipeMenuListView
選項(xiàng)拖拽控件DragGridView:https://github.com/zhaoyu87/DragGridView(用在新聞?lì)l道的選擇頁(yè)里)
Activity滑動(dòng)退出控件 SwipeBackLayout:https://github.com/ikew0ng/SwipeBackLayout?(用在了新聞瀏覽頁(yè)上)
搜索等待動(dòng)畫(huà) SLView (自己寫(xiě)的?):https://github.com/Ccapton/Android-SLView
播放進(jìn)度條ColorfulProgressbar(自己寫(xiě)的?):?https://github.com/Ccapton/Android-ColorfulProgressBar
關(guān)于作者
我的Github:https://github.com/Ccapton/?
我的博客:http://ccapton.cn
歡迎來(lái)踩!