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>状态图</h3>
音频/视频文件和流的播放控制作为状态机进行管理。 下图显示了受支持的播放控件操作驱动的 MediaPlayer 对象的生命周期和状态。 椭圆表示 MediaPlayer 对象可能驻留的状态。 弧线表示驱动对象状态转换的播放控件操作。 有两种类型的弧线。 具有单个箭头头的弧表示同步方法调用,而具有双箭头的弧表示异步方法调用。
<img src=“../../../images/mediaplayer_state_diagram.gif“ alt=”MediaPlayer State diagram“ border=”0“ />
从此状态图中,可以看到 MediaPlayer 对象具有以下状态:
<ul><li>当 MediaPlayer 对象刚刚使用 new
或调用 后 #reset()
创建时,它处于 <em>Idle</em> 状态;调用 后 #release()
,它处于 <em>End</em> 状态。 在这两种状态之间是 MediaPlayer 对象的生命周期。 <>调用><后#reset()
,新构造的 MediaPlayer 对象与 MediaPlayer 对象之间存在细微但重要的区别。 在这两种情况下,在 em Idle/em> 状态中<调用方法(如 #getVideoWidth()
#getDuration()
#getVideoHeight()
#setAudioAttributes(AudioAttributes)
#getCurrentPosition()
#setLooping(boolean)
#setVolume(float, float)
#prepare()
#seekTo(long, int)
#stop()
#start()
#pause()
、 或 #prepareAsync()
)是一个编程错误。<> 如果在构造 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>通常,某些播放控制操作可能会由于各种原因而失败,例如音频/视频格式不受支持、音频/视频交错不良、分辨率过高、流式处理超时等。 因此,在这些情况下,错误报告和恢复是一个重要的考虑因素。 有时,由于编程错误,也可能会调用处于无效状态的播放控件操作。 在所有这些错误条件下,如果已通过 预先 #setOnErrorListener(android.media.MediaPlayer.OnErrorListener)
注册 OnErrorListener,内部播放器引擎会调用用户提供的 OnErrorListener.onError () 方法。 <>请务必><注意,一旦发生错误,MediaPlayer 对象将进入 <>em Error</em> 状态 (,除非) 如上所述,即使应用程序尚未注册错误侦听器。</li>li 为了重用处于><错误/>em< 状态并从错误中恢复的 MediaPlayer 对象,#reset()
可以调用 以将对象还原到其><空闲/em>< 状态。<></li><li>让应用程序注册 OnErrorListener 以查找来自内部播放器引擎的错误通知是一个很好的编程做法。<引发 /li>><IllegalStateException 以防止编程错误,例如调用 #prepare()
、 #prepareAsync()
或处于无效状态的某个重载setDataSource
方法。 </li></ul></li><li>Calling #setDataSource(FileDescriptor)
、 或 #setDataSource(String)
、 #setDataSource(Context, Uri)
或 #setDataSource(FileDescriptor, long, long)
, 或 #setDataSource(MediaDataSource)
将处于 Em>Idle</em> 状态的 <MediaPlayer 对象传输到 <em>Initialized</em> 状态。 <ul><li>如果在任何其他状态下调用 setDataSource () ,则会引发 IllegalStateException。</li><li>这是一个很好的编程做法,始终要从IllegalArgumentException
重载setDataSource
的方法中查找 和 IOException
。</li></ul></li><li>MediaPlayer 对象必须先进入 <em>Prepared</em> 状态,然后才能开始播放。 <ul><li>有两种方法 (同步和异步) <,可以达到 em>Prepared</em> 状态:对 (同步) 的调用 #prepare()
,在方法调用返回后将 <对象传输到 em>Prepared</em> 状态,或调用 #prepareAsync()
(异步) 首先将对象 <传输到 em>Prepared</em> 调用后的状态返回 (,这几乎立即) 发生,而内部玩家引擎继续处理其余的准备工作,直到准备工作完成。 当准备完成或调用返回时#prepare()
,如果通过 预先#setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)
注册 OnPreparedListener,则内部播放器引擎会调用用户提供的回调方法 OnPrepared () OnPreparedListener 接口。</li><li>请务必注意<,em>Preparing</em> 状态是暂时性状态,当 MediaPlayer 对象处于>< em Preparing</em> 状态时调用任何具有副作用的方法的行为未定义。</li><li>如果在#prepare()
任何其他状态下调用 或 #prepareAsync()
,则引发 IllegalStateException。</li><li>在 <em>Prepared</em> 状态下,可以通过调用相应的 set 方法调整属性,如 audio/sound volume、screenOnWhilePlaying、循环。</li></ul></li><li>若要开始播放,#start()
必须调用 。 成功返回后 #start()
,MediaPlayer 对象将处于 <em>Started</em> 状态。 #isPlaying()
可以调用 以测试 MediaPlayer 对象是否处于<启动></em> 状态。 <ul><li>在 em>Started</em> 状态中<,如果已通过 #setOnBufferingUpdateListener(OnBufferingUpdateListener)
预先注册 OnBufferingUpdateListener,则内部玩家引擎会调用用户提供的 OnBufferingUpdateListener.onBufferingUpdate () 回调方法。 此回调允许应用程序在流式传输音频/视频时跟踪缓冲状态。</li><li>调用#start()
对已处于启动<>/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>Calling #pause()
对已处于暂停</>em 状态的 <>MediaPlayer 对象没有影响。</li></ul></li><li>呼叫#stop()
停止播放,并导致处于 <em>Started</em、em>> Paused</em>、<<em>Prepared </em> 或 <em>PlaybackCompleted</em> 状态的 <MediaPlayer 进入 em>Stopped</em> 状态。 <ul><li>进入<>停止</em> 状态后,在调用 或 #prepareAsync()
再次将 MediaPlayer 对象<设置为 Em>Prepared</em> 状态之前#prepare()
,无法启动播放。</li><li>Calling #stop()
对已处于停止<>/em> 状态的 <MediaPlayer 对象没有影响。</li></ul></li><li>可以通过调用 #seekTo(long, int)
调整播放位置。 <ul><li>虽然异步 #seekTo(long, int)
调用会立即返回,但实际的查找操作可能需要一段时间才能完成,尤其是流式传输的音频/视频。 当实际查找操作完成时,如果已通过 预先 #setOnSeekCompleteListener(OnSeekCompleteListener)
注册 OnSeekCompleteListener,则内部播放器引擎会调用用户提供的 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><td>><getAudioSessionId </p></td td>><any </p></td><td td>{}</p></td td><>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr>><<td>getCurrentPosition </p></td><td>{Idle、Initialized、Prepared、Started、Paused、Stopped、PlaybackCompleted}</p></td td>><{Error}</p></td td><>在有效状态下成功调用此方法不会更改状态。 在无效状态下调用此方法会将对象转移到 <>Em Error</em> 状态。 </p></td></tr><td><>getDuration </p></td><td>{Prepared, Started, Paused, Stopped, PlaybackCompleted}</p></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>{Error}</p></td td><>在有效状态下成功调用此方法不会更改状态。 在无效状态下调用此方法会将对象转移到 <>Em Error</em> 状态。 </p></td></tr>><<td>getVideoWidth </p></td><td>{Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}</p></td td>><{Error}</p></td td><>在有效状态下成功调用此方法不会更改状态。 在无效状态下调用此方法会将对象转移到 <>Em Error</em> 状态。 </p></td></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<>>之后#release()
,不得与对象交互。 </p></td></tr><td><>reset </p></td td<>>{Idle、Initialized、Prepared、Started、Paused、Stopped、PlaybackCompleted、Error}</p></td><td>{}</p></td><td>之后#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>{Error}</p></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><>必须在空闲状态下调用,因为音频会话 ID 在调用 setDataSource 之前必须已知。 调用它不会更改对象状态。 </p></td></tr><td>><setAudioStreamType (弃用) </p></td td><>{Idle、Initialized、Stopped、Prepared、Started、Paused、PlaybackCompleted}</p></td td>><{Error}</p></td td><>成功调用此方法不会更改状态。 为了使目标音频流类型生效,必须在 prepare () 或 prepareAsync () 之前调用此方法。</p></td></tr><><td>setAuxEffectSendLevel </p></td td><>any</p></td td><td>{}</p></td td><>调用此方法不会更改对象状态。 </p></td></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 td>><any </p></td td<>td>{}</p></td td td><>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr><td>><setSurface </p></td td>><any </p></td td<>td>{}</p></td td td><>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr><><td>setVideoScalingMode </p></td><td>{Initialized、Prepared、Started、Paused、Stopped、PlaybackCompleted}</p></td td<>>{Idle, Error}</p></td<>td>成功调用此方法不会更改状态。</p></td></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><>any </p></td td><>{}</p></td td td><>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr><><td>setOnBufferingUpdateListener </p></td td>><any </p></td td<>td>{}</p></td td td><>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr><><td>setOnCompletionListener </p></td td><>any </p></td td><td>{}</p></td td><td>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr><><td>setOnErrorListener </p></td td><>any </p></td td><td>{}</p></td td><td>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr><><td>setOnPreparedListener </p></td td>><any </p></td td<>td>{}</p></td td td><>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr><><td>setOnSeekCompleteListener </p></td td><>any </p></td 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><>any </p></td td><td>{}</p></td td><td>可在任何状态下调用此方法,调用此方法不会更改对象状态。 </p></td></tr><td><>setVolume </p></td<>td>{Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}</p></td<>td>{Error}</p></td td><>成功调用此方法不会更改状态。 <tr><td>setWakeMode </p></td td><>any </p></td><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><><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><><td>getTrackInfo </p></td<>td>{Prepared, Started, Stopped, Paused, PlaybackCompleted}</p></td<>td>{Idle, Initialized, Error}</p></td td<>td>成功调用此方法不会更改状态。</p></td></tr>><<td>addTimedTextSource </p></td td><>{Prepared, Started, Stopped, Paused, PlaybackCompleted}</p></td td><>{Idle, Initialized, Error}</p></td td<>td>成功调用此方法不会更改状态。</p></td></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 permission android.R.styleable#AndroidManifestUsesPermission <uses-permission>
元素。
当与基于网络的内容一起使用时, android.Manifest.permission#INTERNET
此类需要 权限。
“Callbacks”><h3>Callbacks</h3>
应用程序可能需要注册信息性和错误事件,以便在播放或流式处理期间通知某些内部状态更新和可能的运行时错误。 这些事件的注册是通过调用 #setOnPreparedListener(OnPreparedListener) setOnPreparedListener
#setOnBufferingUpdateListener(OnBufferingUpdateListener) setOnBufferingUpdateListener
#setOnErrorListener(OnErrorListener) setOnErrorListener
#setOnVideoSizeChangedListener(OnVideoSizeChangedListener) setOnVideoSizeChangedListener
#setOnSeekCompleteListener(OnSeekCompleteListener) setOnSeekCompleteListener
#setOnCompletionListener(OnCompletionListener) setOnCompletionListener
#setOnInfoListener(OnInfoListener) setOnInfoListener
、、 等) 正确设置适当的侦听器 (完成的。 为了接收与这些侦听器关联的相应回调,应用程序需要在具有自己的 Looper 的线程上创建 MediaPlayer 对象,该线程运行 (main UI 线程默认具有运行) 的 Looper。
的 android.media.MediaPlayer
Java 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
构造函数
MediaPlayer() |
默认构造函数。 |
MediaPlayer(Context) |
具有上下文的默认构造函数。 |
MediaPlayer(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
字段
MediaErrorIo |
已过时.
MediaPlayer 类可用于控制音频/视频文件和流的播放。 |
MediaErrorMalformed |
已过时.
MediaPlayer 类可用于控制音频/视频文件和流的播放。 |
MediaErrorTimedOut |
已过时.
MediaPlayer 类可用于控制音频/视频文件和流的播放。 |
MediaErrorUnsupported |
已过时.
MediaPlayer 类可用于控制音频/视频文件和流的播放。 |
MediaMimetypeTextSubrip |
子Rip (SRT) 容器的 MIME 类型。 |
VideoScalingModeScaleToFit |
已过时.
指定视频缩放模式。 |
VideoScalingModeScaleToFitWithCropping |
已过时.
指定视频缩放模式。 |
属性
AudioSessionId |
返回音频会话 ID。 - 或 - 设置音频会话 ID。 |
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 类可用于控制音频/视频文件和流的播放。 |