MediaPlayer 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。
[Android.Runtime.Register("android/media/MediaPlayer", DoNotGenerateAcw=true)]
public class MediaPlayer : Java.Lang.Object, Android.Media.IAudioRouting, Android.Media.IVolumeAutomation, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("android/media/MediaPlayer", DoNotGenerateAcw=true)>]
type MediaPlayer = class
inherit Object
interface IAudioRouting
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface IVolumeAutomation
- 繼承
- 屬性
- 實作
備註
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。
MediaPlayer 不是安全線程。 建立 和 所有播放機實例的存取權都應該位於相同的執行緒上。 如果註冊回呼,執行緒必須有 Looper。
這裡涵蓋的主題包括:ol > li State Diagram < li Valid and Invalid States >< li Permissions < li >> Register informational and error callbacks < /ol ><<>
<div class=「special reference」 >< h3 > Developer Guides < /h3>
如需如何使用 MediaPlayer 的詳細資訊,請參閱 媒體播放 開發人員指南。
</Div>
「StateDiagram」 >< h3 > State Diagram < /h3>
音訊/視訊檔案和資料流程的播放控制會以狀態電腦的形式管理。 下圖顯示支援的播放控制項作業所驅動之 MediaPlayer 物件的生命週期和狀態。 橢圓形代表 MediaPlayer 物件可能所在的狀態。 弧線代表驅動物件狀態轉換的播放控制項作業。 弧線有兩種類型。 具有單一箭頭的弧形代表同步方法呼叫,而具有雙箭頭的弧形則代表非同步方法呼叫。
<img src=「../../../images/mediaplayer_state_diagram.gif「 alt=」MediaPlayer State diagram「 border=」0「 />
在此狀態圖中,您可以看到 MediaPlayer 物件具有下列狀態:
<ul >< li > 使用 或 之後建立 new
MediaPlayer 物件時 #reset()
,它是處於 < em > Idle < /em > 狀態;在呼叫 之後 #release()
,它會處於 < em > End < /em > 狀態。 在這兩種狀態之間,是 MediaPlayer 物件的生命週期。 <ul >< li > 在呼叫 之後 #reset()
,新建構的 MediaPlayer 物件與 MediaPlayer 物件之間有一些細微但重要的差異。 在兩種情況下,叫用方法的程式設計錯誤,例如 #getCurrentPosition()
、 #getDuration()
、 #getVideoHeight()
#setLooping(boolean)
#getVideoWidth()
#pause()
#setAudioAttributes(AudioAttributes)
#setVolume(float, float)
、 #start()
、、 #stop()
、 #prepare()
#seekTo(long, int)
或 #prepareAsync()
< em > Idle < /em > 狀態。 如果在建構 MediaPlayer 物件之後立即呼叫這些方法,則內部播放程式引擎不會呼叫使用者提供的回呼方法 OnErrorListener.onError () ,而且物件狀態保持不變;但是,如果在 之後 #reset()
呼叫這些方法,則使用者提供的回呼方法 OnErrorListener.onError () 將會由內部播放程式引擎叫用,並將物件傳送至 < em > Error < /em > 狀態。 </li li ><> 您必須保留 MediaPlayer 實例的參考,以防止被垃圾收集。 如果 MediaPlayer 實例是垃圾收集的, #release
將會呼叫 ,導致任何進行中的播放停止。 <li > 當您使用 實例完成之後,您必須呼叫 #release()
,以釋放取得的資源,例如記憶體和編解碼器。 呼叫 #release
之後,您就不能再與已發行的實例互動。 <使用 建立的 li > MediaPlayer 物件處於 < em > Idle < /em > 狀態,而使用其中一個多載便利 create
方法建立的物件則是 < em Not < /em 處於 < em >> Idle < / > em > 狀態。 new
事實上,如果使用 create
方法建立成功,則物件會處於 < em > Prepared < /em > 狀態。 </li >< /ul >< /li >< li > 一般而言,某些播放控制作業可能會因為各種原因而失敗,例如不支援的音訊/視訊格式、交錯的音訊/視訊、解析度太高、串流逾時等等。 因此,在這些情況下,錯誤報表和復原是一個重要考慮。 有時候,由於程式設計錯誤,叫用處于無效狀態的播放控制項作業也可能發生。 在所有這些錯誤狀況下,如果 OnErrorListener #setOnErrorListener(android.media.MediaPlayer.OnErrorListener)
事先透過 註冊 OnErrorListener,內部播放程式引擎會叫用使用者提供的 OnErrorListener.onError () 方法。 <ul >< li > 請務必注意,一旦發生錯誤,MediaPlayer 物件就會進入 < em > Error < /em > 狀態 (,但如上述) 所述,即使應用程式尚未註冊錯誤接聽程式也一樣。 </li >< li > 若要重複使用處于 < em > Error < /em > 狀態的 MediaPlayer 物件,並從錯誤中復原, #reset()
可以呼叫 以將物件還原至其 < em > Idle < /em > 狀態。 </li li ><> 讓您的應用程式註冊 OnErrorListener 以尋找來自內部播放程式引擎的錯誤通知是不錯的程式設計做法。 <會擲回 /li ><> IllegalStateException 以防止程式設計錯誤,例如呼叫 #prepare()
、 #prepareAsync()
或處於無效狀態的其中一個多載 setDataSource
方法。 </li >< /ul >< /li >>< 呼叫 #setDataSource(FileDescriptor)
、 或 #setDataSource(String)
、 或 #setDataSource(Context, Uri)
, 或 #setDataSource(FileDescriptor, long, long)
,或 #setDataSource(MediaDataSource)
將 em > Idle < /em > 狀態中的 < MediaPlayer 物件傳送至 < em > Initialized < /em > 狀態。 <ul li 如果 setDataSource () 以任何其他狀態呼叫,則會擲回 ul >< li > An IllegalStateException。 </li >< li > 最好一律查看 IllegalArgumentException
,而且 IOException
可能會從多 setDataSource
載方法擲回。 </li >< /ul >< /li li >>< A MediaPlayer 物件必須先進入 < em > Prepared < /em > 狀態,才能啟動播放。 <ul > li 有兩種方式 (同步與非同步) < 可以達到 em > Prepared/em > 狀態:呼叫 (同步) >< ,一旦方法呼叫 #prepare()
傳回 em Prepared << /em > 狀態,或 #prepareAsync()
呼叫 (非同步) 第一次將物件傳送至 < em Prepare < /em >>><呼叫傳回之後的狀態 (幾乎會立即發生) ,而內部播放程式引擎會繼續處理其餘的準備工作,直到準備工作完成為止。 當準備完成或呼叫傳回時 #prepare()
,內部播放程式引擎接著會呼叫使用者提供的回呼方法 OnPreparedListener 介面 onPrepared () ,如果 OnPreparedListener 事先透過 #setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)
註冊。 </li >< li > 請務必注意, < em > Preparing < /em > 狀態是暫時性狀態,而且當 MediaPlayer 物件處於 < em > Preparing < /em > 狀態時呼叫任何具有副作用的方法行為是未定義。 </li >< li > 如果 #prepare()
或 #prepareAsync()
以任何其他狀態呼叫,則會擲回 IllegalStateException。 </li li ><> 在 em > Prepared < /em > 狀態中 < ,音訊/聲音音量、screenOnWhilePlaying 等屬性可以藉由叫用對應的 set 方法來調整迴圈。 </li >< /ul >< /li li >>< 若要開始播放, #start()
必須呼叫 。 成功傳回之後 #start()
,MediaPlayer 物件會處於 < em > Started < /em > 狀態。 #isPlaying()
可以呼叫 來測試 MediaPlayer 物件是否處於 < em > Started < /em > 狀態。 <ul > li In the < em > Started < /em > state, the internal player engine if a onBufferingUpdateListener.onBufferingUpdate () callback method if a OnBufferingUpdateListener has registered beforehanded via #setOnBufferingUpdateListener(OnBufferingUpdateListener)
. >< 此回呼可讓應用程式在串流音訊/視訊時追蹤緩衝狀態。 </li >< li > 呼叫 #start()
不會影響已處於 em > Started < /em > 狀態的 < MediaPlayer 物件。 </li >< /ul >< /li ><> Li 播放可以暫停和停止,而且可以調整目前的播放位置。 您可以透過 #pause()
暫停播放。 當 呼叫傳 #pause()
回時,MediaPlayer 物件會進入 < em > Paused < /em > 狀態。 請注意,從 < em Started < /em > 狀態轉換至 < em > Paused < /em > 狀態,反之亦然,會在播放機引擎中以 > 非同步方式進行。 在呼叫 #isPlaying()
中更新狀態之前,可能需要一些時間,而且在串流內容的情況下可能是秒數。 <ul >< li > 呼叫 #start()
以繼續播放已暫停的 MediaPlayer 物件,而繼續播放位置與暫停的位置相同。 當 呼叫 #start()
傳回時,暫停的 MediaPlayer 物件會回到 < em > Started < /em > 狀態。 </li ><> li 呼叫 #pause()
不會影響已處於 em > Paused < /em > 狀態的 < MediaPlayer 物件。 </li >< /ul >< /li >>< 呼叫 #stop()
會停止播放,並讓 em > Started < /em > 、em > Paused < / > em、 << em > Prepared < / > em 或 < em > PlaybackCompleted/em > 狀態的 < MediaPlayer 進入 < em > Stopped << /em > 狀態。 <ul >< li > 一旦處於 < em > Stopped < /em > 狀態,在呼叫 或 #prepareAsync()
將 MediaPlayer 物件再次設定為 < em > Prepared < /em > 狀態之前 #prepare()
,無法啟動播放。 </li ><> li 呼叫 #stop()
對已經處於 em > Stopped < /em > 狀態的 < MediaPlayer 物件沒有任何作用。 </li >< /ul >< /li li >>< 可以透過呼叫 #seekTo(long, int)
來調整播放位置。 <ul >< li > 雖然非同步 #seekTo(long, int)
呼叫會立即傳回,但實際的搜尋作業可能需要一段時間才能完成,特別是在串流處理音訊/視訊時。 當實際的搜尋作業完成時,內部播放程式引擎會在透過 預先 #setOnSeekCompleteListener(OnSeekCompleteListener)
註冊 OnSeekComplete.onSeekComplete () 時呼叫使用者提供的 OnSeekComplete () 。 </li >< li > 請注意, #seekTo(long, int)
也可以在其他狀態中呼叫,例如 < em > Prepared < /em > 、 < em > Paused < /em > 和 < em > PlaybackCompleted < /em > state。 在這些狀態中呼叫 時 #seekTo(long, int)
,如果串流有視訊且要求的位置有效,則會顯示一個視訊畫面。 </li >< li > 此外,可以使用 呼叫 #getCurrentPosition()
來擷取實際的目前播放位置,這對需要追蹤播放進度的音樂播放程式之類的應用程式很有説明。 </li >< /ul >< /li >< li > 當播放到達資料流程結尾時,播放就會完成。 <ul >< li > 如果迴圈模式設定為 < var true < /var >> 與 #setLooping(boolean)
,則 MediaPlayer 物件應保持 <> em Started < /em > 狀態。 </li >< li > 如果迴圈模式設定為 < var false < /var >> ,播放程式引擎會呼叫使用者提供的回呼方法 OnCompletion.onCompletion () ,如果事先 #setOnCompletionListener(OnCompletionListener)
透過 註冊 OnCompletionListener。 回呼的叫用表示物件現在處於 < em > PlaybackCompleted < /em > 狀態。 </li >< li > 在 em > PlaybackCompleted < /em > 狀態中 < ,呼叫 #start()
可以從音訊/視訊來源的開頭重新開機播放。 </li >< /ul>
「Valid_and_Invalid_States」 >< h3 > 有效且不正確狀態 < /h3>
<table border=「0」 cellspacing=「0」 cellpadding=「0」 > tr td > 方法名稱 < /p >< / ><> td td 有效狀態 /p >< /td ><> td 無效狀態 << /p/td td 批註 < / >< p >< /td <><>> /tr >><<> td attachAuxEffect < /p >< /td >< td td > {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} < /p >< /td td ><> {Idle, Error} < /p/ ><><<td td ><> 這個方法必須在 setDataSource 之後呼叫。 呼叫它並不會變更物件狀態。 </p >< /td/tr >< tr >< td >>< getAudioSessionId < /p >< /td ><> td any < /p/td >< td >{}< /p ><>< /td td >>< 此方法可以在任何狀態中呼叫,而且呼叫此方法並不會變更物件狀態。 </p >< /td/tr >< td ><>>< getCurrentPosition < /p >< /td td >>< {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}/p/td >< td td > {Error} << /p ><>< /td >< td td > 在有效狀態中成功叫用此方法不會變更狀態。 以無效狀態呼叫這個方法會將物件傳送至 < em > Error < /em > 狀態。 </p >< /td/tr >< tr >< td >>< getDuration < /p >< /td td ><> {Prepared, Started, Paused, Stopped, PlaybackCompleted} < /p >< /td td >< td > {Idle, Initialized, Error} < /p >< /td >< td td > 此方法的有效狀態叫用不會變更狀態。 以無效狀態呼叫這個方法會將物件傳送至 < em > Error < /em > 狀態。 </p >< /td/tr >< td ><>>< getVideoHeight < /p >< /td <> td > {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}/p >< /td <> td td > {Error} << /p >< /td td td ><> 此方法的有效狀態叫用不會變更狀態。 以無效狀態呼叫這個方法會將物件傳送至 < em > Error < /em > 狀態。 </p >< /td/tr tr ><>< td >>< getVideoWidth < /p >< /td >< td > {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}/p >< /td >< td td > {Error} << /p >< /td td td ><> 此方法的有效狀態不會變更狀態。 以無效狀態呼叫這個方法會將物件傳送至 < em > Error < /em > 狀態。 </p >< /td/tr >< tr >< td >>< isPlaying < /p >< /td td >>< {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}/p/td >< td > {Error} << /p ><>< /td >< td td > 在有效狀態中成功叫用此方法不會變更狀態。 以無效狀態呼叫這個方法會將物件傳送至 < em > Error < /em > 狀態。 </p/td/tr >><< td ><> pause < /p ><>< /td <> td > {Started, Paused, PlaybackCompleted} < /p >< /td td ><> {Idle, Initialized, Prepared, Stopped, Error} < /p >< /td <> td td > 在有效的狀態中成功叫用此方法,會將物件傳送至 < em > Paused < /em > 狀態。 以無效狀態呼叫這個方法會將物件傳送至 < em > Error < /em > 狀態。 </p/td/tr ><>< td >>< prepare < /p ><>< /td <> td > {Initialized, Stopped} < /p >< /td <> td > {Idle, Prepared, Started, Paused, PlaybackCompleted, Error} < /p >< /td <> td td > 在有效的狀態下成功叫用此方法,會將物件傳送至 < em > Prepared < /em > 狀態。 以無效狀態呼叫這個方法會擲回 IllegalStateException。 </p >< /td/tr >< td ><><> prepareAsync < /p >< /td td ><> {Initialized, Stopped} < /p >< /td >< td > {Idle, Prepared, Started, Paused, PlaybackCompleted, Error} < /p >< /td >< td td > 在有效的狀態下成功叫用此方法,會將物件傳送至 < em Prepare < /em >> 狀態。 以無效狀態呼叫這個方法會擲回 IllegalStateException。 </p >< /td/tr >< td ><>>< release < /p >< /td ><> td any < /p >< /td td >< td >{}< /p >< /td <> td > After , #release()
您不得與物件互動。 </p/td/tr > td ><>>< reset < /p ><>< /td >< td > {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} < /p >< /td td <> td >{}< /p >< /td <> td > After #reset()
, 物件就像剛建立一樣。 <</p >< /td/tr ><>< td >>< seekTo < /p >< /td <> td > {Prepared, Started, Paused, PlaybackCompleted} < /p >< /td <> td > {Idle, Initialized, Stopped, Error} < /p >< /td td >< td > 此方法的有效狀態叫用不會變更狀態。 以無效狀態呼叫這個方法會將物件傳送至 < em > Error < /em > 狀態。 </p >< /td/tr >< td ><>>< setAudioAttributes < /p >< /td <> td > {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}/p >< /td <> td td > {Error} << /p >< /td td td ><> 此方法的成功叫用不會變更狀態。 為了讓目標音訊屬性類型生效,必須在 prepare () 或 prepareAsync () 之前呼叫此方法。 </p >< /td/tr >< td ><>>< setAudioSessionId < /p >< /td <> td > {Idle} < /p >< /td <> td > {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} < /p >< /td td >< td > 這個方法必須在閒置狀態呼叫,因為呼叫 setDataSource 之前必須知道音訊會話識別碼。 呼叫它並不會變更物件狀態。 </p >< /td/tr >< td ><><> setAudioStreamType (已淘汰) < /p >< /td <> td > {Idle,Initialized,Stopped,Prepared, Started, Paused, PlaybackCompleted}/p >< /td td td ><> {Error} << /p >< /td td >< td td > 此方法的成功叫用不會變更狀態。 為了讓目標音訊串流類型生效,必須在 prepare () 或 prepareAsync () 之前呼叫此方法。 </p >< /td/tr >< tr >< td >>< setAuxEffectSendLevel < /p >< /td >< td > any < /p/td >< td >{}< /p ><>< /td >< td > 呼叫此方法並不會變更物件狀態。 </p >< /td/tr >< tr >< td >>< setDataSource < /p >< /td td ><> {Idle} < /p >< /td td >>< {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} < /p >< /td >< td td > 在有效狀態中成功叫用此方法, 會將物件傳送至 < em > Initialized < /em > 狀態。 以無效狀態呼叫這個方法會擲回 IllegalStateException。 </p >< /td/tr >< td ><>>< setDisplay < /p >< /td <>> 任何 < /p >< /td >< td >{}< /p >< /td td ><> 這個方法可以在任何狀態中呼叫,呼叫此方法並不會變更物件狀態。 </p >< /td/tr >< tr >< td >>< setSurface < /p >< /td >>< any < /p >< /td >< td >{}< /p >< /td td ><> 這個方法可以在任何狀態中呼叫,呼叫此方法並不會變更物件狀態。 </p >< /td/tr >< tr >< td >>< setVideoScalingMode < /p >< /td >< td > {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} < /p >< /td >< td td > {Idle, Error} < /p >< /td td >< td > 成功叫用此方法不會變更狀態。 </p >< /td/tr >< tr >< td >>< setLooping < /p >< /td td >>< {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}/p/td >< td > {Error} << /p ><>< /td td >< td > 在有效狀態中成功叫用此方法不會變更狀態。 呼叫處於無效狀態的此方法會將物件傳送至 < em > Error < /em > 狀態。 </p >< /td/tr >< td >><>< isLooping < /p >< /td td <>> 任何 < /p >< / >< td td >{}< /p >< /td td ><> 此方法可以在任何狀態呼叫,而且呼叫此方法不會變更物件狀態。 </p >< /td/tr tr ><>< td >>< setOnBufferingUpdateListener < /p >< /td td ><> any < /p >< / >< td td >{}< /p >< /td td >>< 這個方法可以在任何狀態中呼叫,而且呼叫此方法不會變更物件狀態。 </p >< /td/tr tr ><>< td >>< setOnCompletionListener < /p >< /td td ><> 任何 < /p >< / >< td td >{}< /p >< /td td >>< 此方法可以在任何狀態呼叫,而且呼叫此方法不會變更物件狀態。 </p >< /td/tr tr ><>< td >>< setOnErrorListener < /p >< /td td ><> 任何 < /p >< / >< td td >{}< /p >< /td td >>< 這個方法可以在任何狀態呼叫,而且呼叫此方法不會變更物件狀態。 </p >< /td/tr tr ><<> td >>< setOnPreparedListener < /p >< /td td ><> 任何 < /p ><>< /td td td >{}< /p >< /td td ><> 此方法可以在任何狀態呼叫,而且呼叫此方法不會變更物件狀態。 </p >< /td/tr tr ><>< td >>< setOnSeekCompleteListener < /p >< /td td ><> any < /p >< / >< td td >{}< /p >< /td td >>< 這個方法可以在任何狀態呼叫,而且呼叫此方法不會變更物件狀態。 </p >< /td/tr >< td ><>>< setPlaybackParams < /p >< /td <> td > {Initialized, Prepared, Started, Paused, PlaybackCompleted, Error}/p >< /td <> td > {Idle, Stopped} << /p >< /td td ><> 此方法會根據呼叫時變更狀態。 </p >< /td/tr >< td ><><> setScreenOnWhilePlaying < / >< /td td <> 任何 >< /p >< / >< td td >{}< /p >< /td td ><> 此方法可以在任何狀態呼叫,呼叫此方法並不會變更物件狀態。 </p >< /td/tr tr ><<> td >>< setVolume < /p >< /td >< td > {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}/p/td >< td > {Error} << /p ><>< /td td td ><> 此方法的成功叫用不會變更狀態。 <tr >< td > setWakeMode < /p/td td > any < /p >< /td >><< td >{}< /p ><>< /td td >>< 此方法可以在任何狀態呼叫,呼叫此方法並不會變更物件狀態。 </p >< /td/tr >< td >><>< start < /p >< /td td >>< {Prepared, Started, Paused, PlaybackCompleted} < /p >< /td td ><> {Idle, Initialized, Stopped, Error} < /p >< /td td td >>< 成功叫用此方法的有效狀態會將物件傳送至 < em > Started < /em > 狀態。 呼叫處於無效狀態的此方法會將物件傳送至 < em > Error < /em > 狀態。 </p >< /td/tr >< tr >< td >>< stop < /p >< /td td >>< {Prepared, Started, Stopped, Paused, PlaybackCompleted} < /p >< /td td ><> {Idle, Initialized, Error} < /p >< /td td td >>< 成功叫用此方法的有效狀態會將物件傳送至 < em > Stopped < /em > 狀態。 呼叫處於無效狀態的此方法會將物件傳送至 < em > Error < /em > 狀態。 </p >< /td/tr tr ><<> td >>< getTrackInfo < /p >< /td >< td > {Prepared, Started, Stopped, Paused, PlaybackCompleted} < /p >< /td td ><> {Idle, Initialized, Error} < /p >< /td td td <>> 此方法的成功叫用不會變更狀態。 </p >< /td/tr tr ><<> td > addTimedTextSource <>< /p >< /td >< td > {Prepared, Started, Stopped, Paused, PlaybackCompleted} < /p >< /td td ><> {Idle, Initialized, Error} < /p >< /td td td <>> 此方法的成功叫用不會變更狀態。 </p >< /td/tr tr ><<> td >>< selectTrack < /p >< /td >< td > {Prepared, Started, Stopped, Paused, PlaybackCompleted} < /p >< /td td ><> {Idle, Initialized, Error} < /p >< /td td td <>> 成功叫用此方法不會變更狀態。 </p >< /td/tr >< td >><>< deselectTrack < /p >< /td <> td > {Prepared, Started, Stopped, Paused, PlaybackCompleted} < /p >< /td td ><> {Idle, Initialized, Error} < /p >< /td td td <>> 成功叫用此方法不會變更狀態。 </p >< /td >< /tr>
</表>
「Permissions」 >< h3 > Permissions < /h3>
其中一個可能需要宣告對應的WAKE_LOCK許可權 android.R.styleable#AndroidManifestUsesPermission <uses-permission>
元素。
這個類別需要 android.Manifest.permission#INTERNET
搭配網路內容使用時的許可權。
「Callbacks」 >< h3 > Callbacks < /h3>
應用程式可能會想要註冊資訊事件和錯誤事件,以在播放或串流期間收到某些內部狀態更新和可能的執行時間錯誤。 註冊這些事件的方式是透過呼叫 #setOnPreparedListener(OnPreparedListener) setOnPreparedListener
、 #setOnVideoSizeChangedListener(OnVideoSizeChangedListener) setOnVideoSizeChangedListener
、 #setOnSeekCompleteListener(OnSeekCompleteListener) setOnSeekCompleteListener
、 #setOnInfoListener(OnInfoListener) setOnInfoListener
#setOnCompletionListener(OnCompletionListener) setOnCompletionListener
#setOnBufferingUpdateListener(OnBufferingUpdateListener) setOnBufferingUpdateListener
#setOnErrorListener(OnErrorListener) setOnErrorListener
等) 正確設定適當的接聽程式 (。 為了接收與這些接聽程式相關聯的個別回呼,應用程式必須線上程上建立 MediaPlayer 物件,且執行緒上執行自己的 Looper,預設會執行主要 UI 執行緒 (有迴圈器執行) 。
的 android.media.MediaPlayer
JAVA 檔。
此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據中所述的詞彙使用。
建構函式
MediaPlayer() |
預設建構函式。 |
MediaPlayer(Context) |
具有內容的預設建構函式。 |
MediaPlayer(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 標記法時所使用的建構函式;由執行時間呼叫。 |
欄位
MediaErrorIo |
已淘汰.
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
MediaErrorMalformed |
已淘汰.
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
MediaErrorTimedOut |
已淘汰.
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
MediaErrorUnsupported |
已淘汰.
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
MediaMimetypeTextSubrip |
SubRip (SRT) 容器的 MIME 類型。 |
VideoScalingModeScaleToFit |
已淘汰.
指定視訊縮放模式。 |
VideoScalingModeScaleToFitWithCropping |
已淘汰.
指定視訊縮放模式。 |
屬性
AudioSessionId |
傳回音頻會話識別碼。 -或- 設定音訊會話識別碼。 |
Class |
傳回這個 |
CurrentPosition |
取得目前的播放位置。 |
Duration |
取得檔案的持續時間。 |
Handle |
基礎 Android 實例的控制碼。 (繼承來源 Object) |
IsPlaying |
檢查 MediaPlayer 是否現正播放。 |
JniIdentityHashCode |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
JniPeerMembers |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
Looping |
檢查 MediaPlayer 是否正在迴圈或非迴圈。 -或- 將播放程式設定為迴圈或非迴圈。 |
Metrics |
傳回目前播放機的相關計量資料。 |
PeerReference |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
PlaybackParams |
取得包含目前播放速率的播放參數。 -或- 使用 |
PreferredDevice |
傳回 所 |
RoutedDevice |
傳 |
SyncParams |
取得 A/V 同步模式。 -或- 設定 A/V 同步模式。 |
ThresholdClass |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式碼使用。 |
ThresholdType |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式碼使用。 |
Timestamp |
以 取得目前的播放位置 |
VideoHeight |
傳回視訊的高度。 |
VideoWidth |
傳回視訊的寬度。 |
方法
事件
BufferingUpdate |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
Completion |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
DrmInfoEvent |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
DrmPrepared |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
Error |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
Info |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
MediaTimeDiscontinuity |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
Prepared |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
RoutingChanged |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
SeekComplete |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
SubtitleData |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
TimedMetaDataAvailable |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
TimedText |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
VideoSizeChanged |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
明確介面實作
IJavaPeerable.Disposed() |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
IJavaPeerable.Finalized() |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
IJavaPeerable.JniManagedPeerState |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 (繼承來源 Object) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |
GetJniTypeName(IJavaPeerable) |
MediaPlayer 類別可用來控制音訊/視訊檔案和資料流程的播放。 |