相信大家不想再去了解那些本地音樂(lè)的了 其實(shí)網(wǎng)絡(luò)獲取音樂(lè)也沒(méi)有那么復(fù)雜 你只需要有一個(gè)自己uri所謂的網(wǎng)址 但必須只有音樂(lè)文件 沒(méi)有其他的元素 這里我為了方便自己搭建了一個(gè)服務(wù)器 直接從我服務(wù)器獲取音樂(lè)軟件 現(xiàn)在網(wǎng)絡(luò)音樂(lè)播放大部分都是用戶(hù)指明歌名來(lái)播放
下面給大家看一下我的工程文件夾 我使用了主線程和service服務(wù)兩種方法來(lái)實(shí)現(xiàn)音樂(lè)播放 后臺(tái)服務(wù)可以?xún)?yōu)化運(yùn)行穩(wěn)定性 首先我先來(lái)講一下在線程中實(shí)現(xiàn)網(wǎng)絡(luò)音樂(lè)播放器

首先看我的布局文件 是很簡(jiǎn)單的布局 主要是給一部分人講思路 如果想實(shí)現(xiàn)音樂(lè)列表可以自己加一個(gè)listView 我這里主要指定了一個(gè)網(wǎng)絡(luò)上的音樂(lè) uri地址為http://120.78.188.33/wp-content/uploads/2018/07/樓沁-癡情玫瑰花-女聲版-1.mp3
這是我自己的服務(wù)器地址 我的服務(wù)器我不一定隨時(shí)開(kāi)啟 大家可以根據(jù)情況找地址
xml文件中加入了三個(gè)圖片按鈕 播放 暫停 停止

這里公布了MidiaPlayer的結(jié)構(gòu)流程 順便補(bǔ)充一下 不僅可以視頻音樂(lè)播放 還可以流的播放 在API26即安卓8.0以后加了傳輸加密的工具 具體看官網(wǎng)谷歌官網(wǎng)MediaPlayer簡(jiǎn)介
由于我設(shè)備谷歌翻墻 這個(gè)鏈接可能不能訪問(wèn) 建議谷歌翻墻

然后看一下布局關(guān)聯(lián)的java文件 聲明三個(gè)按鈕和MediaPlayer媒體播放器 媒體播放器可以播放音樂(lè)和視頻 這里用到了音樂(lè)
聲明網(wǎng)址 這里為公開(kāi)的 如果不想公開(kāi)可以設(shè)置成private 但其他類(lèi)就不可以訪問(wèn)了 根據(jù)情況而定
下面是activity生命周期銷(xiāo)毀的方法
如果播放器正在運(yùn)行和播放器正在播放 停止播放器 主要是為了用戶(hù)關(guān)閉你的軟件優(yōu)化內(nèi)存
然后適當(dāng)你占用系統(tǒng)播放器的資源 初始化你的播放器
繼承銷(xiāo)毀方法的所有類(lèi)和屬性
只有本方法可以訪問(wèn)到活動(dòng)生命周期的創(chuàng)建周期
綁定ui控件id 也可以寫(xiě)一個(gè)方法用來(lái)單獨(dú)存儲(chǔ)綁定控件id

實(shí)現(xiàn)按鈕監(jiān)聽(tīng) 判斷媒體播放器是否存在 如果不存在調(diào)用ready方法 這個(gè)方法下面會(huì)寫(xiě)到
點(diǎn)擊播放按鈕啟動(dòng)播放器
暫停按鈕監(jiān)聽(tīng)
當(dāng)播放器存在和正在播放調(diào)用播放器的暫停方法
停止按鈕監(jiān)聽(tīng)
當(dāng)播放器不為空和播放器正在運(yùn)行
播放器停止運(yùn)行 由于播放器只能播放一次音樂(lè) 所以需要釋放資源 release

然后初始化 要不然播放器一直占用資源無(wú)法點(diǎn)擊停止按鈕后點(diǎn)擊播放按鈕 如果不寫(xiě)這兩句會(huì)出現(xiàn)不能重新播放
下面寫(xiě)的是準(zhǔn)備ready方法 這是我自己寫(xiě)的 然后在其他地方調(diào)用這個(gè)方法 用來(lái)避免代碼的繁瑣
準(zhǔn)備工作是創(chuàng)建媒體播放器 如果媒體播放器不存在 創(chuàng)建媒體播放器
嘗試媒體播放器設(shè)置數(shù)據(jù)資源 上下文本文 uri 解析開(kāi)始聲明的uri 這里到了初始化狀態(tài)還不能播放
媒體播放器準(zhǔn)備 當(dāng)準(zhǔn)備了就可以播放了
如果想有個(gè)音樂(lè)列表自己添加listView設(shè)置適配器 到這里就講完了主線程實(shí)現(xiàn)音樂(lè)播放了 是不是特別簡(jiǎn)單

下面來(lái)講述使用服務(wù)service實(shí)現(xiàn)音樂(lè)播放
布局文件同樣是這個(gè) 我綁定了同一個(gè)布局
然后直接來(lái)看我的服務(wù)類(lèi)的解析
這個(gè)類(lèi)繼承了服務(wù)的所有屬性和方法
聲明媒體播放器聲明operatorReceiver操作寄存器 操作寄存器用來(lái)接受主界面ui的返回
同樣聲明uri網(wǎng)址 uri可以指明網(wǎng)址 也可以指明一些手機(jī)內(nèi)部存儲(chǔ)數(shù)據(jù)庫(kù)地址
同樣的與主線程方法一樣實(shí)現(xiàn)軟件銷(xiāo)毀進(jìn)程的方法 然后不管哪種情況都關(guān)閉registerReceiver寄存接收器 寄存接收器是用來(lái)放操作接收器獲得的數(shù)據(jù) 用戶(hù)銷(xiāo)毀軟件進(jìn)程就不需要操作接受了 可以銷(xiāo)毀

繼承屬性
活動(dòng)的創(chuàng)建方法實(shí)現(xiàn) 每個(gè)活動(dòng)都必須實(shí)現(xiàn)創(chuàng)建方法 否則會(huì)出錯(cuò)
初始化操作接收器
設(shè)置信使過(guò)濾器 指明action
把操作接收器獲得的數(shù)據(jù)放到寄存接收器里? 操作接收器的名字 和action
初始化媒體播放器
綁定方法 這里我沒(méi)用到
下面寫(xiě)預(yù)測(cè)開(kāi)始暫停停止的方法? 調(diào)用開(kāi)始暫停停止方法

同樣 停止播放后重新準(zhǔn)備一下 用來(lái)讓用戶(hù)停止后可以繼續(xù)點(diǎn)擊播放
服務(wù)的開(kāi)始命令方法 同樣調(diào)用一個(gè)準(zhǔn)備工作
這里指明了準(zhǔn)備方法的內(nèi)容 這個(gè)準(zhǔn)備方法不可以生成 是我自己寫(xiě)的方法
每次準(zhǔn)備重啟一下媒體播放器 reset重啟
嘗試
首先設(shè)置媒體播放器數(shù)據(jù)資源data Source 同樣初始狀態(tài)不可以播放
媒體播放器準(zhǔn)備 寫(xiě)到這一步就可以播放音樂(lè)了
然后寫(xiě)了一個(gè)class用來(lái)繼承廣播接收器

實(shí)現(xiàn)接受方法
設(shè)置一個(gè)數(shù)組 命名 信使得到的額外數(shù)據(jù) 名字 默認(rèn)值-1因?yàn)椴豢赡転?1
開(kāi)關(guān)名字cmd
按鍵Tools類(lèi)中的按鈕play調(diào)用開(kāi)始音樂(lè)方法

來(lái)看一下我的tools文件 這里把按鈕點(diǎn)擊三個(gè)轉(zhuǎn)換成了數(shù)字

最后別忘了在功能清單中聲明網(wǎng)絡(luò)權(quán)限和注冊(cè)servicer

到這里兩個(gè)方法就都講完了 首先這里講一下由于所有的代碼都是自己寫(xiě)的思路 如果有哪里做的不好請(qǐng)指出 我會(huì)盡力為大家分享安卓開(kāi)發(fā)的知識(shí) 有時(shí)間我會(huì)公布我的音樂(lè)列表播放和實(shí)現(xiàn)上下曲功能 同時(shí)讀取音樂(lè)時(shí)間和藝人 而且我會(huì)講述本人對(duì)官網(wǎng)的理解 相信大家一看到谷歌官網(wǎng)就頭大 寫(xiě)的太亂 隨后我會(huì)發(fā)表簡(jiǎn)書(shū)給大家分享經(jīng)驗(yàn)
現(xiàn)在到了給小編點(diǎn)小心心的時(shí)候了 小編編寫(xiě)這又得不到好處 只希望你點(diǎn)個(gè)小心心 哈哈