播放器公共組件sdk搭建實現(xiàn)與總結(jié)(AudioPlayer sdk Version1.0)

by?吳思博?2018/2/8


由于時間緊張,需要在多個項目中要快速實現(xiàn)音頻播放功能,所以做成了音頻sdk形式,再由項目接入 (此篇主要是sdk結(jié)構(gòu),?MediaPlayer介紹請見《播放器之MediaPlayer詳解與總結(jié)》 )。


內(nèi)容簡要:

一、aar的生成與引用

二、sdk中主要類介紹

三、綁定MusicService

四、播放(操作)信息回調(diào)接口

五、播放界面PlayerView

六、MusicService的主要邏輯


一?aar的生成與引用

1、生成步驟:

1.生成一個library類型的mould.

2.執(zhí)行?./gradlew assembleRelease,然后aar文件生成在build/outputs/aar里面

在Android Studio中,在某一個Module的Gradle腳本開頭聲明:

修改gradle:

??接著編譯該Module,編譯完成之后會在Module的build-->outputs-->aar--> .aar?,如下圖所示:


2、aar使用:

?把aar文件放在一個文件目錄內(nèi),比如就放在libs目錄內(nèi);在app的build.gradle文件添加如下內(nèi)容;

之后只需要添加一句gradle依賴便方便的引用了該aar文件。

此時把aar接入到了項目,可以在相應(yīng)項目中使用。

二、sdk中主要類介紹

1?、AudioPlayer:初始化、常用方法、設(shè)置等一些工作(初始化、設(shè)置、綁定服務(wù)、連接綁定服務(wù)、重要方法、普通方法等)。

2、MusicService:是最重要的類,音樂播放Service,處理音頻播放邏輯。

3、OnOpenMusicServiceListener: 綁定MusicService?回調(diào)(Service連接成功、Service取消連接等方法回調(diào))。

4、OnPlayerListener:播放(操作)信息回調(diào)接口(歌曲信息回調(diào)、播放操作回調(diào)、播放暫?;卣{(diào) 等)

5、PlayerView:?與SRPlayerView一樣, 把播放、上一首、下一首、拖動進(jìn)度條等界面與操作邏輯封裝成一個View, 我們在項目中只需要調(diào)用View即可。

6、MusicInfoBean是播放文件的model類,包括url、標(biāo)題等信息

?AudioPlayer中?musicInfoList?是播放列表

通過addMusic(List musicList),把歌曲加入播放列表。

調(diào)用playPause()進(jìn)行播放:

三、綁定MusicService

?AudioPlayer類進(jìn)行綁定服務(wù)和停止服務(wù)單獨調(diào)用bindService()方法將Activity和Service綁定,以達(dá)到服務(wù)內(nèi)部方法的目的,再調(diào)用unbindService()解綁。 分別點擊bindService和unbindService,在類MusicService中,會以onCreate()開始代表第一次創(chuàng)建服務(wù);以onDestory()結(jié)束代表服務(wù)被銷毀;在中間當(dāng)綁定成功時,會調(diào)用onServiceConnected()表明Activity和Service連接成功;當(dāng)解除綁定時,會調(diào)用onUnbind()表明Activity和Service解除連接成功。 當(dāng)點擊bindService時,會觸發(fā)onCreate()和onServiceConnected()方法,以達(dá)到調(diào)用服務(wù)內(nèi)部方法的目的。但是,請注意后臺服務(wù)進(jìn)程并沒有啟動

開啟Service有三種情況:

①調(diào)用startService(),再調(diào)用stopService()。

②單獨調(diào)用bindService()方法,再unbindService()后,以執(zhí)行服務(wù)內(nèi)部的方法。

③先調(diào)用startService(),再調(diào)用bindService()方法,再調(diào)用unbindService(),最后調(diào)用stopService()。

如果直接使用服務(wù),則沒有必要進(jìn)行綁定,但是如果要使用服務(wù)里面的方法,則要進(jìn)行綁定。特殊情況:只要使用了bindService,不管之后是否解綁和停止服務(wù),都可以調(diào)用服務(wù)中的方法

我們使用的是第二種開啟Service的方式,單獨調(diào)用bindService()方法,再unbindService()后,以執(zhí)行服務(wù)內(nèi)部的方法

當(dāng)點擊unbindService時,會觸發(fā)onUnbind()和onDestory()方法表明解除綁定和銷毀服務(wù)。

調(diào)用onUnbind()和onDesctory()方法,后臺也沒有服務(wù)線程。但是,雖然解除了綁定,我們卻依舊可以調(diào)用服務(wù)中的方法。



四、播放(操作)信息回調(diào)接口

?在MusicService中相應(yīng)的位置設(shè)置一些回調(diào),例如緩沖結(jié)束回調(diào)。

需要在AudioPlayer設(shè)置監(jiān)聽方法:

??在添加監(jiān)聽后,用戶只需要在接入項目相應(yīng)Activity實現(xiàn)此接口,就能獲取對應(yīng)信息的回調(diào)。

五、PlayerView播放界面

?如圖:?PlayerView主要包括了進(jìn)度條、上一首、下一首、播放暫停、倒計時等。在項目中只需要調(diào)用View即可。

PlayerView?實現(xiàn)了OnPlayerListener回調(diào):

例如切換歌曲獲得onMusicChange()方法回調(diào),更新進(jìn)度條長度、獲取當(dāng)前音頻時間等信息。

PlayerView使用:

?沒錯就是使用自定義view一樣,在xml文件中設(shè)置。

另外需要設(shè)置監(jiān)聽:

?如果覺得自身的實現(xiàn)不能滿足需求,playerview也提供接口onPlayerViewListener可以自己實現(xiàn)播放、上一首等邏輯。


六、MusicService的主要邏輯

???MusicService在onCreate()時會初始化播放器initMediaPlayer()。setOnCompletionListener(MediaPlayer.OnCompletionListener listener)?為Media Player的播放完成事件綁定事件監(jiān)聽器。 每次播完mediaPlayer會回調(diào)此方法,我們可以在此方法中實現(xiàn)播下一首邏輯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【Android Service】 Service 簡介(★★★) 很多情況下,一些與用戶很少需要產(chǎn)生交互的應(yīng)用程...
    Rtia閱讀 3,236評論 1 21
  • 服務(wù)基本上分為兩種形式 啟動 當(dāng)應(yīng)用組件(如 Activity)通過調(diào)用 startService() 啟動服務(wù)時...
    pifoo閱讀 1,331評論 0 8
  • 第一種方式:通過StartService啟動Service 通過startService啟動后,service會一...
    Big不吃魚閱讀 121,620評論 8 94
  • 綁定服務(wù): 綁定服務(wù)是客戶端-服務(wù)器接口中的服務(wù)器。綁定服務(wù)可讓組件(例如 Activity)綁定到服務(wù)、發(fā)送請求...
    pifoo閱讀 1,311評論 0 4
  • 今天講的是時鐘源GCC和復(fù)位, HSI(內(nèi)部高速)、LSI(內(nèi)部低速)、HSE(外部高速)、LSE(外部低速)。 ...
    李藝瑩閱讀 286評論 3 0

友情鏈接更多精彩內(nèi)容