1. 程式人生 > >Android mediaplayer 播放本地音樂檔案

Android mediaplayer 播放本地音樂檔案

上一個部落格講到了搜尋本地音樂檔案,那麼當搜尋到後,我們怎麼使用這個音樂檔案呢?當然是根據路徑來播放他,而要播放音樂,自然而然是要用到Android的mediaplayer這個類。

對於mediaplayer,大家應該都有些瞭解,所以就不累贅了,下面就講下他的流程

上面是mediaplayer的狀態圖,看得出mediaplayer有兩個極端的生命週期:idie還有end,當一個MediaPlayer物件被剛剛用new操作符建立或是呼叫了reset()方法後,它就處於Idle狀態。當呼叫了release()方法後,它就處於End狀態。這兩種狀態之間是MediaPlayer物件的生命週期。

例項化一個mediaplayer的方法有兩種,分別是:

可以使用直接new的方式:
MediaPlayer mp = new MediaPlayer();
也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//這時就不用呼叫setDataSource了

1.以new一個mediaplayer為例,當new了一個mediaplayer的時候,我們需要為他設定資料來源,通常有三個,一個是設定路徑,一個是設定流

如:

 

這個方法用來設定sdk中的檔案

(既得加上讀取記憶體卡的許可權)

還有

這個方法是用來設定asset資料夾的,比如程式自帶的音樂檔案

<textarea style="width: 318px; height: 52px;" <font size="5"> 

根據路徑來播放,多為網路播放

(需要網路許可權)

當進入初始化狀態後,我們所需要的,是進行prepare狀態,如果不進行prepare狀態,呼叫start方法是無法響應的,這是因為在prepare狀態的時候,會進行開執行緒的

操作,而播放音樂又是一個耗記憶體的行為,所以需要開一個執行緒。有兩種方法(同步和非同步)可以使MediaPlayer物件進入Prepared狀態:要麼呼叫prepare()方法(同步),此方法返回就表示該MediaPlayer物件已經進入了Prepared狀態;要麼呼叫prepareAsync()方法(非同步),此方法會使此MediaPlayer物件進入Preparing狀態並返回,而內部的播放引擎會繼續未完成的準備工作。從圖解看出來,在從初始化到prepare狀態,基本都是呼叫前者,因為沒有未完成的準備工作

在這時候,我們就可以呼叫onstart方法來播放我們的音樂了,在播放的時候,我們可以設定他的各個引數,如,是否迴圈,而他的迴圈,就是我們音樂播放的“單曲迴圈”了,

好,在onstart方法中,可以切換到兩種狀態,一個是onstop狀態,一個是onpause狀態。

onpause:顧名思義,就是暫停,如果要繼續播放,需要重新呼叫onstart方法

onstop:就是停止,需要重新回到prepare狀態才可以播放,這時候,有兩個方法可以呼叫,詳情請看prepare那兒,這也就是為什麼有的播放器停止後從新開啟,可以停留在上回播放的seek中

細心的朋友應該看到了,有一個onseek方法,他的作用是使得mediaplayer播放的“時刻”改變,而且在onstart還有onpause都是通用的

當程式關閉,或則停止播放時,我們應該release一下,釋放下,

最後,提一下mediaplayer的exception,在一般情況下,由於種種原因一些播放控制操作可能會失敗,如不支援的音訊/視訊格式,缺少隔行掃描的音訊/視訊,解析度太高,流超時等原因,等等。因此,錯誤報告和恢復在這種情況下是非常重要的。有時,由於程式設計錯誤,在處於無效狀態的情況下呼叫了一個播放控制操作可能發生。在所有這些錯誤條件下,內部的播放引擎會呼叫一個由客戶端程式設計師提供的OnErrorListener.onError()方法。客戶端程式設計師可以通過呼叫

若當MediaPlayer處於其它(非idie)的狀態下,呼叫setDataSource()方法,會丟擲IllegalStateException異常。

MediaPlayer.setOnErrorListener(android.media.MediaPlayer.OnErrorListener)方法來註冊一旦發生錯誤,MediaPlayer物件會進入到Error狀態OnErrorListener.,這時候,播放自然而然停止的、

在Android的servicer中,可以看到他的描述“用來操作耗時的工作,如“播放音樂,網路等””,所以,我們應該把它放到server中去實現

對於mediaplayer類的檢視,看得出很多都是mative方法,所以c渣渣的我默默結束了這篇部落格

相關推薦

Android mediaplayer 播放本地音樂檔案

上一個部落格講到了搜尋本地音樂檔案,那麼當搜尋到後,我們怎麼使用這個音樂檔案呢?當然是根據路徑來播放他,而要播放音樂,自然而然是要用到Android的mediaplayer這個類。 對於mediapl

使用libvlc簡單的播放一首本地音樂檔案

#include <iostream> #include <unistd.h> #include "vlc/vlc.h" #include "libvlc.h" #include "libvlc_media_player.h" #include "log_

Android之簡單本地音樂播放

平臺:Android studio 本地的音樂播放器,主要功能就是可以播放音樂,能夠讀取本地的音樂,並顯示出來,播放,暫停,上一首,下一首,進度條可以拖拽播放,添加了前臺service,看一下實現        首先我是先做了一個大概的佈局,樣子先出來,需要其他的空間後期

Android基礎之本地音樂後臺播放

使用service後臺播放音樂,彈出通知public class MainActivity extends Activity { private MusicAdpater adapter; private IMusicPlay mMusicPlay; private

Android MediaPlayer 播放各種來源的音訊檔案,特效控制

MediaPlayer通過資源ID播放Raw目錄下音訊資原始檔: MediaPlayer mMediaPlayer; mMediaPlayer = MediaPlayer.create(th

IOS 播放本地音樂(播放記憶體卡中的MP3) 及 檔案的寫入

在IOS開發中, 每一個應用程式都擁有一個Documents的資料夾來存放自己的檔案。 在這裡為了測試, 我們首先得把mp3檔案匯入到專案中。 然後讀出資源裡的mp3檔案,寫入到documents中, 然後再從documents中讀取該mp3檔案來播放。 (在實際當中也許我

iOS音頻播放之AudioQueue(一):播放本地音樂

init方法 函數 完成 一起 utc getprop 應用 清洗 spl AudioQueue簡單介紹 AudioStreamer說明 AudioQueue具體

Android Studio載入本地aar檔案

如果要在Android Studio中引用本地的aar檔案:mylib.aar,步驟如下: 1.在需要引用mylib.aar的Module,比如:MyModule的根目錄下新建目錄:libs,然後把mylib.aar複製到此目錄下。 2.在MyModule的build.gradle中,新增如下定

Android MediaPlayer播放raw資源封裝類

import android.content.Context; import android.media.MediaPlayer; import com.bhuitong.yibaocan.R; public class MediaUtil { MediaPlayer mPlay

linux下如何利用瀏覽器播放本地flv檔案

雖然這裡我寫的東西比較少,比較簡單,你看了可能覺得,哇,這麼簡單。但是 ,到達這裡之前,我真的是找了好久,才知道這個方法。 ------------------------------------------------------我是華麗的分割線--------------

android app 讀取本地.db檔案,實現不變資料本地化(附小demo)

今天是正月十三,作為壽星的我依然奮鬥在工作中,醉了。-------------喧囂的成人世界,守住本真的心。 在專案中,有一部分資料,雖然是從介面拿取的,但是這些資料有個特點,就是一般不會再去改變了。對於這樣的資料來說,我是絕對不會每次用都去調介面,請求資料需要時間,需

Android MediaPlayer 播放器網路音訊播放總結

        在近期的Android 系統MediapPalyer使用中,碰到了不少問題。其中一些問題也是在特殊的條件下才會出現,嘗試很多方法才解決。這裡做了總結,也跟大家分享一下: 1.播放器需要多執行緒實現         一般我們會把MediaPlayer放到Ser

android 之 讀取本地json檔案返回string

public static String getJson(String fileName, Context context){ StringBuilder stringBuilder

FFMpeg+SDL2.0 播放本地AVI檔案練手示例程式

FFMpeg版本: ffmpeg-3.4-win32-dev SDL版本:SDL2-2.0.7 參考文章: 雷神的各種相關文章。。。 希望能有一定的參考幫助吧…… // FFmpeg_playTest.cpp : 定義控制檯應用程式的入口點。 // #incl

Android MediaPlayer播放音訊與視訊

使用MediaPlayer播放音訊與視訊 播放音訊 首先創建出一個MediaPlayer物件 MediaPlayer mMediaPlayer = new MediaPlayer(

Android 中級教程之------Android MediaPlayer播放mp3的例項!

Android 中級教程之——Android MediaPlayer播放mp3的例項! 大家好我們今天研究的是Android中很重要也最為複雜的媒體播放器—MediaPlayer. Android的MediaPlayer包含了Audio和video的播放

Android VideoView播放本地視訊短暫黑屏的解決方法

       新的大版本終於正式釋出了,整整三個月,做的心力交瘁,導致好久都沒有更新文章了。最近接觸了許多新的知識,也算是忙碌中有所收穫。希望接下來的時間工作上能夠稍微鬆緩一些,讓我可以利用在家的閒

ios播放本地聲音檔案

從一段程式碼裡找到幾個片段: #import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioToolbox.h> // 載入音效 - (SystemSoundID)loadSound

android讀取sd卡音樂檔案顯示亂碼

android讀取sd卡音樂檔案,有的音樂title和藝術家等亂碼,利用如下方式順利解決:try{        if(title.equals(new String(title.getBytes("iso8859-1"), "iso8859-1"))){         

android Mediaplayer 播放視訊 只有聲音沒有畫面的問題

剛剛解決了 mediaplayer 和SurfaceView播放視訊 只有聲音沒有畫面的問題, 最終確定為,holder.setFixedSize(width,heigh); 設定解析度的方法,放在了 mediaplayer的回撥函式裡,導致沒有畫面, 把這個holder.