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 不是线程安全的。 创建玩家实例以及所有对玩家实例的访问权限都应位于同一线程上。 如果注册回调,则线程必须具有循环器。
此处介绍的主题包括: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>当刚刚使用 new
或调用后 #reset()
创建 MediaPlayer 对象时,它处于 <em>Idle</em> 状态;调用后 #release()
,它处于 <em>End</em> 状态。 在这两种状态之间是 MediaPlayer 对象的生命周期。 <ul><li>调用后 #reset()
,新构造的 MediaPlayer 对象与 MediaPlayer 对象之间存在细微但重要的区别。 调用两种情况的 em Idle/em> 状态等#prepareAsync()
#getVideoHeight()
#getVideoWidth()
#getDuration()
#setAudioAttributes(AudioAttributes)
#getCurrentPosition()
#setLooping(boolean)
#setVolume(float, float)
#seekTo(long, int)
<#stop()
#start()
#prepare()
#pause()
方法是一个编程错误。<> 如果在构造 MediaPlayer 对象后立即调用上述任一方法,则内部玩家引擎不会调用用户提供的回调方法 OnErrorListener.onError(),并且对象状态保持不变;但是,如果在之后 #reset()
调用这些方法,则由内部玩家引擎调用用户提供的回调方法 OnErrorListener.onError(),并且对象将传输到 <em>Error</em> 状态。 </li li><>必须保留对 MediaPlayer 实例的引用,以防止其被垃圾回收。 如果垃圾回收 MediaPlayer 实例, #release
将调用,导致任何正在进行的播放停止。 <li>在使用实例释放获取的资源(如内存和编解码器)后,必须调用 #release()
它。 调用 #release
后,必须不再与已发布的实例进行交互。 <使用 创建的 li>MediaPlayer 对象处于 <em>Idle/em> 状态,而使用其中一种重载的方便create
方法创建的对象在 em Idle<</em 状态中<为 <em>>NOT</em>>。new
事实上,如果使用create
方法创建成功,则对象处于 <em>Prepared</em> 状态。 </li></ul></li li>><通常,某些播放控制操作可能会因各种原因而失败,例如不受支持的音频/视频格式、交错音频/视频、分辨率过高、流式处理超时等。 因此,在这些情况下,错误报告和恢复是一个重要问题。 有时,由于编程错误,调用处于无效状态的播放控件操作也可能发生。 在所有这些错误条件下,如果事先通过 #setOnErrorListener(android.media.MediaPlayer.OnErrorListener)
OnErrorListener 注册了 OnErrorListener,内部播放器引擎将调用用户提供的 OnErrorListener.onError() 方法。 <ul><li>请务必注意,发生错误后,MediaPlayer 对象将进入 <em>Error</em> 状态(如上所述),即使应用程序尚未注册错误侦听器也是如此。</li><li>为了重用 em Error</em> 状态中的><MediaPlayer 对象并从错误中恢复,#reset()
可以调用它,将对象还原到其 <em>Idle</em> 状态。</li li><>最好让应用程序注册 OnErrorListener 来查找内部播放器引擎的错误通知。<引发 /li><>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>> 状态。 <如果在任何其他状态下调用 setDataSource(),则会引发 ul><li>An IllegalStateException。</li li><>最好始终留意IOException
IllegalArgumentException
,并且可能会从重载setDataSource
方法引发。</li></ul></li li>><A MediaPlayer 对象必须先输入 <em>Prepared</em> 状态,然后才能启动播放。 <ul><li>可通过两种方式(同步与异步)<到达 em>Prepared</em 状态:#prepare()
一旦方法调用返回,将对象传输到 em>Prepared</em>> 状态,或调用 #prepareAsync()
(异步),首先将对象<<传输到 em>Prepared</em>调用返回后的状态(几乎立即发生),而内部玩家引擎将继续处理剩余的准备工作,直到准备工作完成。 当准备完成或调用返回时#prepare()
,如果事先通过 #setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)
OnPreparedListener 注册 OnPreparedListener,则内部播放器引擎将调用用户提供的回调方法 onPreparedListener。</li li>><请务必注意,<em>Preparing</em> 状态是暂时状态,当 MediaPlayer 对象处于 <em>Preparing</em> 状态时调用任何具有副作用的方法的行为是未定义的。</li li><>An IllegalStateException 是在#prepare()
任何其他状态下调用或#prepareAsync()
调用的。</li li><>在 em>Prepared</em> 状态中<,可以通过调用相应的设置方法来调整音频/声音音量、screenOnWhilePlaying 等属性。</li></ul></li li>><若要启动播放,#start()
必须调用。 成功返回后 #start()
,MediaPlayer 对象处于 <em>Started</em> 状态。 #isPlaying()
可以调用以测试 MediaPlayer 对象是否处于 <em>Started</em> 状态。 <ul><li>在 em>Started</em> 状态中<时,如果已事先通过 #setOnBufferingUpdateListener(OnBufferingUpdateListener)
OnBufferingUpdateListener 注册 OnBufferingUpdateListener.onBufferingUpdate() 回调方法,则内部播放器引擎将调用用户提供的 OnBufferingUpdateListener。 此回调允许应用程序在流式传输音频/视频时跟踪缓冲状态。</li li>><Calling #start()
对已处于 em>Started</em> 状态的 <MediaPlayer 对象没有影响。</li></ul></li li>><Playback 可以暂停和停止,并且可以调整当前播放位置。 可以通过 . 暂停 #pause()
播放。 调用 #pause()
返回时,MediaPlayer 对象进入 <em>Paused</em> 状态。 请注意,从 <em>Started</em> 状态到 <em>Paused</em> 状态的转换,反之亦然,在玩家引擎中异步发生。 在调用 #isPlaying()
状态之前,可能需要一些时间,在流式传输内容的情况下,状态可能为秒数。 <ul><li>Calling #start()
to resume playback for a paused MediaPlayer object, and the resumed playback position as the paused. 调用#start()
返回时,暂停的 MediaPlayer 对象将返回到 <em>Started</em> 状态。</li><li>Calling #pause()
对已处于 em>Paused</em> 状态的 <MediaPlayer 对象没有影响。</li>/ul></li li>><呼叫#stop()
停止播放,并导致 <em>Started</em、em Paused</em>>、<<em>>Prepared </>em 或 <em>PlaybackCompleted</em> 状态进入 <em>Stopped</em> 状态。< <ul><li>一旦处于 <em>Stopped</em> 状态,播放将无法启动,直到#prepare()
或#prepareAsync()
被调用以再次将 MediaPlayer 对象设置为 <em>Prepared</em> 状态。</li><li>Calling #stop()
对已处于 em>Stopped</em> 状态的 <MediaPlayer 对象没有影响。</li></ul></li li>><可通过调用#seekTo(long, int)
来调整播放位置。 <ul><li>虽然异步 #seekTo(long, int)
调用立即返回,但实际搜寻操作可能需要一段时间才能完成,尤其是流式传输音频/视频。 当实际查找操作完成时,如果事先通过 #setOnSeekCompleteListener(OnSeekCompleteListener)
< 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 Method Name </p/td<>>>td Valid <States /p></td td Td Invalid States </p></td><>Comments </p><></<><>td>/tr><<>td>attachAuxEffect </p></td<>td td>{Initialized, 已准备好、已启动、已暂停、已停止、PlaybackCompleted}</p></td><td>{Idle、Error}</p/><><<td td><>此方法必须在 setDataSource 后调用。 调用它不会更改对象状态。 </p></td/tr><tr><td>>< getAudioSessionId </p></td td><>any </p></td><td td><<>{}<>> 此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td/tr><tr><td>>< getCurrentPosition </p></td td><>{Idle, Initialized, Prepared, Started, Paused, Stopped, Stopped, PlaybackCompleted}</p></td td td>{Error}</p></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>成功调用此方法的有效状态不会更改状态。 以无效状态调用此方法会将对象传输到 <em>Error</em> 状态。 </p></td></tr><tr><td>getVideoHeight </p></td><td>{Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}</p></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>{Error}</p></td td td><>成功调用此方法的有效状态不会更改状态。 以无效状态调用此方法会将对象传输到 <em>Error</em> 状态。 </p></td></tr><tr><td>isPlaying </p></td td><>{Idle, Initialized, Prepared, Started, Paused, Stopped, Stopped, PlaybackCompleted}</p></td><td td>{Error}</p></td td><>成功调用此方法的有效状态不会更改状态。 以无效状态调用此方法会将对象传输到 <em>Error</em> 状态。 </p></td/tr><tr><td>>< pause </p></td><td{Started, Paused>, PlaybackCompleted}</p></td><td>{Idle, Initialized, Prepared, Stopped, Error}</p></td td td td>><成功调用此方法,处于有效状态将对象传输到 <em>Paused</em> 状态。 以无效状态调用此方法会将对象传输到 <em>Error</em> 状态。</p/td></tr><tr><td>prepare </p><></td><td td{Initialized>, Stopped}</p></td<>td>{Idle, Prepared, Started, Paused, PlaybackCompleted, Error}</p></td td>><成功调用此方法的有效状态将对象传输到 <em>Prepared</em> 状态。 在无效状态下调用此方法将引发 IllegalStateException。</p></td></tr><tr><td>prepareAsync </p></td td><>{Initialized, Stopped}</p></td td><td>{Idle, Prepared, Started, Paused, PlaybackCompleted, Error}</p></td td<>>成功调用此方法的有效状态将对象传输到 <em>Prepare</em> 状态。 在无效状态下调用此方法将引发 IllegalStateException。</p></td></tr><tr><td release </p></td><td>>any </p></td><td td>{}</p></td td>><After#release()
, you must not interact with the object. </p></td/tr><tr><td>>< reset </p></td><td>{Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error}</p><></td><<>td td td>>{}< After#reset()
, the object is like is just created.</p></td></tr><tr><td>seekTo </p></td><td{Prepared, Started, Paused>, PlaybackCompleted}</p></td><td td>{Idle, Initialized, Stopped, Error}</p></td td><>成功调用此方法的有效状态不会更改状态。 以无效状态调用此方法会将对象传输到 <em>Error</em> 状态。 </p></td></tr><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><tr><td>setAudioSessionId </p></td><td>{Idle}</p></td td td><{Initialized>, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error}</p></td td td><>: 必须在调用 setDataSource 之前以空闲状态调用此方法,因为必须知道音频会话 ID。 调用它不会更改对象状态。 </p></td></tr><tr><td>setAudioStreamType (已弃用)</p></td td>><{Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}</p></td<>td td>{Error}</p></td td><>成功调用此方法不会更改状态。 为了使目标音频流类型生效,必须在 prepare() 或 prepareAsync()之前调用此方法。</p></td></tr><tr><td>setAuxEffectSendLevel </p></td><td td>any</p></td><td td<>{}<><>> 调用此方法不会更改对象状态。 </p></td></tr><tr><td>setDataSource </p></td td>><{Idle}</p></td td><>{Initialized, Prepared, Started, Paused, Stopped, Stopped, PlaybackCompleted, Error}</p></td td<>>成功调用此方法的有效状态将对象传输到 <em>Initialized</em> 状态。 在无效状态下调用此方法将引发 IllegalStateException。</p></td></tr><tr><td>setDisplay </p/td td>><any </p><></td><td>{}</p></td><td td>此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td></tr><tr><td>setSurface </p/td td>><any </p><></td><td>{}</p></td 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 td>{Error}</p><></td><td Td><>成功调用此方法的有效状态不会更改状态。 以无效状态调用此方法会将对象传输到 <em>Error</em> 状态。</p></td/tr><tr><td>>< isLooping </p/td td>><any </p><></td><td>{}</p></td td td><>此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td></tr><tr><td>setOnBufferingUpdateListener </p/td td>><any </p><></td><td td>{}</p></td><td td>此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td></tr><tr><td>setOnCompletionListener </p></td td><>any </p></td><td td><<>{}<>> 此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td></tr><tr><td>setOnErrorListener </p></td td><>any </p></td><td td><<>{}<>> 此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td></tr><tr><td>setOnPreparedListener </p></td td><>any </p></td><td td><<>{}<>> 此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td></tr><tr><td>setOnSeekCompleteListener </p/td td>><any </p><></td><td td>{}</p></td><td td>此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td/tr><tr><td>>< setPlaybackParams</p></td><td>{Initialized, Prepared, Started, Paused, PlaybackCompleted, Error}/p/td><td>{Idle, Stopped}<</p><></td td><td>此方法在某些情况下将更改状态,具体取决于调用时间。 </p></td></tr><tr><td>setScreenOnWhilePlaying</></td><td>any </p></td><td>{}</p></td td><Td>此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。 </p></td></tr><tr><td>setVolume </p></td td>><{Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}</p/td><td td>{Error}</p><></td td><>成功调用此方法不会更改状态。 <tr><td>setWakeMode </p/td td<>td>any </p><></td<>td td>{}<><><> 此方法可以在任何状态下调用,并且调用此方法不会更改对象状态。</p></td></tr><tr><td>start </p></td><td{Prepared, Started, Paused>, PlaybackCompleted}</p></td><td td>{Idle, Initialized, Stopped, Error}</p></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><td>{Idle, Initialized, Error}</p></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 td>{Idle, Initialized, Error}</p></td td>><成功调用此方法不会更改状态。</p></td/tr><tr><td>>< addTimedTextSource </p></td><td>{Prepared, Started, Stopped, Paused, PlaybackCompleted}</p></td td<>td{Idle, Initialized>, Error}</p></td td>><成功调用此方法不会更改状态。</p></td/tr><tr><td>>< selectTrack </p></td td>><{Prepared, Started, Stopped, Paused, PlaybackCompleted}</p></td><td td>{Idle, Initialized, Error}</p></td td>><成功调用此方法不会更改状态。</p></td></tr><tr><td>deselectTrack </p></td><td>{Prepared, Started, Stopped, Paused, PlaybackCompleted}</p></td><td td>{Idle, Initialized, Error}</p></td td td Td>><成功调用此方法不会更改状态。</p></td></tr>
</桌子>
“权限”><h3>权限</h3>
可能需要声明相应的WAKE_LOCK权限 android.R.styleable#AndroidManifestUsesPermission <uses-permission>
元素。
此类在与基于网络的内容一起使用时需要 android.Manifest.permission#INTERNET
权限。
“Callbacks”><h3>Callbacks</h3>
应用程序可能需要注册信息性事件和错误事件,以便在播放或流式处理期间通知一些内部状态更新和可能的运行时错误。 通过正确设置相应的侦听器(通过调用#setOnPreparedListener(OnPreparedListener) setOnPreparedListener
、、、#setOnSeekCompleteListener(OnSeekCompleteListener) setOnSeekCompleteListener
#setOnCompletionListener(OnCompletionListener) setOnCompletionListener
#setOnVideoSizeChangedListener(OnVideoSizeChangedListener) setOnVideoSizeChangedListener
、#setOnBufferingUpdateListener(OnBufferingUpdateListener) setOnBufferingUpdateListener
、#setOnInfoListener(OnInfoListener) setOnInfoListener
、等#setOnErrorListener(OnErrorListener) setOnErrorListener
)来注册这些事件。 为了接收与这些侦听器关联的相应回调,应用程序需要在线程上创建 MediaPlayer 对象,其自己的 Looper 运行(默认情况下,主 UI 线程具有循环器运行)。
适用于 . 的 android.media.MediaPlayer
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
构造函数
MediaPlayer() |
默认构造函数。 |
MediaPlayer(Context) |
具有上下文的默认构造函数。 |
MediaPlayer(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
字段
MediaErrorIo |
已过时.
MediaPlayer 类可用于控制音频/视频文件和流的播放。 |
MediaErrorMalformed |
已过时.
MediaPlayer 类可用于控制音频/视频文件和流的播放。 |
MediaErrorTimedOut |
已过时.
MediaPlayer 类可用于控制音频/视频文件和流的播放。 |
MediaErrorUnsupported |
已过时.
MediaPlayer 类可用于控制音频/视频文件和流的播放。 |
MediaMimetypeTextSubrip |
SubRip (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 类可用于控制音频/视频文件和流的播放。 |