- 浏览: 258987 次
- 性别:
- 来自: 深圳
最新评论
-
whizkid:
[img] private void enableNdefEx ...
android通过NFC读写数据 -
zhangminglife:
您好!不错,最近正在弄这个东西,能否把demo发给我一份谢谢了 ...
SSL双向认证java实现(转) -
water卡:
android如何调用显示和隐藏系统默认的输入法 -
water卡:
android如何调用显示和隐藏系统默认的输入法 -
sjp524617477:
good
生成android使用的BKS证书
MediaPlayer中文API
public class
MediaPlayer
继承自 Object
java.lang.Object
android.media.MediaPlayer
该类概述
MediaPlayer 能被用来控制音频/视频文件或流媒体的回放,可以在VideoView里找到关于如何使用这个该类中的这个方法的例子。请参看Audio and Video以获得使用MediaPlayer 的额外帮助。
包括的主题:
1.状态图
2.有效或无效状态
3.权限
状态图
音频/视频文件或流媒体的回放控制是以状态机的形式管理的。下面的状态图显示了被回放控制操作支持的MediaPlayer 的生命周期和状态。椭圆形代表MediaPlayer 可以存在的状态,弧线代表推动状态转换的回放控制操作。有两种弧线类型,有单箭头的弧线代表同步的调用方法,双箭头的则代表异步方式。
从这个状态图中, 可以看出一个MedioPlayer有以下几个状态:
1、当一个MediaPlayer 使用new或在reset()被呼叫的方式创建后,它就处于Idle(空闲)状态,当release()被呼叫后,就处于End(结束)状态,在这两个状态间的就是MediaPlayer 的生命周期。
在一个用new构造的MediaPlayer 对象和呼叫reset()方式创建MediaPlayer对象间有个微小但很重要的区别,两者在Idle状态调用诸如getCurrentPosition(), getDuration(), getVideoHeight(), getVideoWidth(), setAudioStreamType(int), setLooping(boolean), setVolume(float, float), pause(), start(), stop(), seekTo(int), prepare() 或prepareAsync()的时候有一个程序设计错误,如果在MediaPlayer对象创建后两者两种方式都被正确的呼叫,用户提供回调方法OnErrorList ener.onError() 将不会被内部的播放引擎呼叫并且对象的状态仍然保持不变。但是如果这些方法在呼叫reset()后被正确的呼叫,那么用户提供的回调方法OnErrorListener.onError()将被内部的播放引擎唤起并且这个对象将转换为Error状态。需要提到的是一旦MediaPlayer对象不再被使用到,为保证与MediaPlayer相关的内部播放引擎所使用的资源能够马上得到释放应立即呼叫release()方法。该资源可能包含单例模式的信息如硬件加速组件所以呼叫release()失败可能会导致后来的MediaPlayer对象实例退到软件的实现或一起失败。一旦fallback to对象处于End状态,它就不再被使用且不再有任何方式让它重新回到其他的状态。此外,使用new创建的MediaPlayer对象是处于Idle状态的,而其他用方便的重载create方法的MediaPlayer对象则不处于Idle状态,事实上,使用create方法成功创建的MediaPlayer对象是处于Prepared状态的。
2.通常,一些播放控制操作会由于多种原因导致失败,如不支持的音频/视频格式,杂*交错的音频/视频、分辨率太高、数据流超时等等,因此,在此情况下,错误记录和报告是一个值得着重关心的事情。有时,由于程序设计的错误在不适当的状态请求播放控制操作也可能导致失败。在所有的出错条件下,如果预先由setOnErrorListener(android.media.MediaPlayer.OnErrorList ener).注册后内部播放引擎会调用用户提供的OnErrorListener.onError()方法。
一旦错误发生而记录它是很重要的,即使错误监听没有在程序里面注册MediaPlayer对象也会进入Error状态。
为了重新使用错误状态的MediaPlayer对象使它错误状态下恢复,可以呼叫reset()来把这个对象恢复到Idle状态。
在你的程序里注册错误监听来从内部播放引擎中查找错误信息是一个好的程序设计做法。
在错误状态异常抛出以阻止程序的错误如呼叫prepare(),prepareAsync(),或在一个无效的状态重载setDataSource方法。
呼叫setDataSource(FileDescriptor), 或setDataSource(String), 或setDataSource (Context, Uri), 或setDataSource(FileDescriptor, long, long)转变一个处于Idle状态的MediaPlayer到初始化状态。
如果在其他的任何状态呼叫setDataSource()方法那么就会抛出错误状态异常。
在重载setDataSource()方法的时候检查错误状态异常和IO异常时一个良好的编程习惯。
MediaPlayer对象在播放开始前必须首先进入Prepared(准备)状态。
有两种方式(同步和异步)可以达到Prepared(准备)状态的目的:一旦这个方法返回的时候呼叫prepare()(同步的)以使这个对象转换为Prepare状态,或者当内部播放引擎在准备继续做其他剩余的准备工作的时候在呼叫返回(以正确的方式发生)后转换这个对象到准备状态直到准备工作完成。当准备工作完成或者当prepare()呼叫返回,内部播放引擎按后呼叫用户提供的播放方法,OnPreparedListener接口的onPrepared()方法,前提是这个接口之前注册过setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener).
值得注意的是准备状态时一个过渡的状态,当MediaPlayer对象在准备状态未明确的定义的时候就会在呼叫任何方法的时候产生副作用,如果prepare()或perpareAsync()在任何其他状态被呼叫就会抛出状态错误异常。
当处于准备状态的时候,比如音频/声音的音量、播放屏幕、可以通过唤起相应的设置方法来矫正。
为了开始播放,start()必须被呼叫,在start()成功返回后,MediaPlayer对象就处于开始状态了,可以用isPlaying()方法来测试MediaPlayer对象是否处于开始状态。
当处于开始状态的时候,如果用户提供的OnBufferingUpdateListener.onBufferingUpdate()在先前通过setOnBufferingUpdateListener(OnBufferingUpdateListener)注册过的话,内部播放引擎会呼叫用户提供的该方法。
这种播放允许应用在取得音频/视频流的时候保持缓冲的数据记录。
呼叫start()不会影响到处于开始状态的MediaPlayer对象,播放可以被暂停可停止,并且当前的播放位置可以调节,可以通过pause()方法来暂停播放,当呼叫pause()后,MediaPlayer对象就处于暂停状态了,注意到从开始到暂停状态的转换和暂停到开始的转换时一样的道理,可以在状态更新前呼叫isPlaying(),在数据填充填充内容后它会花若干秒的时间。
在暂停状态会叫start()方法可以重新恢复播放状态,并且重新播放的位置和暂停时候的位置是一样的,当呼叫start()后,MediaPlayer对象返回到开始状态。
在暂停状态会叫pause()对MediaPlayer对象毫无影响,呼叫stop()停止播放,控制处于开始、暂停、准备或播放完成状态的MediaPlayer进入停止状态。
一旦处于停止状态,播放在呼叫prepare()或prepaeAsync()以设置MediaPlayer对象到准备状态之前是无法开始播放的。
即使异步方法seekTo(int)在正确的方式呼叫后,实际的查找操作也可能需要一段时间去完成,特别是对于audio/video数据流。当实际查找操作完成后,内部播放引擎会呼叫用户提供OnSeekComplete.onSeekComplete()方法,前提是先前的OnSeekCompletedListener通过setOnSeekCompletedListener(OnSeekCompleteListener)注册过的话。
需要注意的是seekTo(int)也可以在其他状态诸如准备、暂停、播放完成等被呼叫。
此外,可以通过呼叫getCurrentPosition()以取得当前的播放位置,这会对一些应用比如需要保持播放进度纪录的音乐播放器将很有用。
当播放到达数据流的终点时,播放即完成。如果循环状态被setLooping(boolean)设为true,那么MediaPlayer对象应该会重新进入开始状态。如被设为false,播放引擎会呼叫用户提供的回放方法OnCompletion.onCompletion(),前提是OncompletionListener先前被SetOnCompletionListener(OnCompletionListener)注册过。调用的播放会表明这个对象现在是处于播放完成状态中。
当处于播放完成状态中时,呼叫start()可以重新使音频/视频资源播放。
有效和无效的状态:
方法名 有效状态 无效状态 说明
getCurrentPosition {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
getDuration {Prepared, Started, Paused, Stopped, PlaybackCompleted} {Idle, Initialized, Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
getVideoHeight {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
getVideoWidth {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
isPlaying {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
pause {Started, Paused} {Idle, Initialized, Prepared, Stopped, PlaybackCompleted, Error} 在有效状态成功呼叫该方法改变此时的状态到暂停状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中.
prepare {Initialized, Stopped} {Idle, Prepared, Started, Paused, PlaybackCompleted, Error} 在有效状态成功呼叫该方法改变此时的状态到准备状态,在无效的状态呼叫该方法则会抛出错误状态异常
prepareAsync {Initialized, Stopped} {Idle, Prepared, Started, Paused, PlaybackCompleted, Error} 在有效状态成功呼叫该方法改变此时的状态到准备状态,在无效的状态呼叫该方法则会抛出错误状态异常
release any {} 在release()该对象不再是可用的
reset {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} {} 在reset()后该对象如刚创建的一样
seekTo {Prepared, Started, Paused, PlaybackCompleted} {Idle, Initialized, Stopped, Error} 在有效状态成功呼叫该方法改变此时的状态到暂停状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
setAudioStreamType {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法改变此时的状态到暂停状态
setDataSource {Idle} {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} 在有效状态成功呼叫该方法改变此时的状态到初始化状态,在无效的状态呼叫该方法则会抛出错误状态异常
setDisplay any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setLooping {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
isLooping any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnBufferingUpdateListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnCompletionListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnErrorListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnPreparedListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnSeekCompleteListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setScreenOnWhilePlaying any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setVolume {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} {Error} 成功调用该方法不会改变当前的状态
setWakeMode any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
start {Prepared, Started, Paused, PlaybackCompleted} {Idle, Initialized, Stopped, Error} 在有效状态成功呼叫该方法改变此时的状态到开始状态,在无效的状态呼叫该方法则会转换到错误状态
stop {Prepared, Started, Stopped, Paused, PlaybackCompleted} {Idle, Initialized, Error} 在有效状态成功呼叫该方法改变此时的状态到停止状态,在无效的状态呼叫该方法则会转换到错误状态
权限
需要声明一个WAKE_LOCK相应的权限<uses-permission>
摘要
Nested Classes
接口 MediaPlayer.OnBufferingUpdateListener 该接口定义了唤起指明网络上的媒体资源以缓冲流的形式播放
接口 MediaPlayer.OnCompletionListener 该接口是为当媒体资源的播放完成后被唤起的回放定义的
接口 MediaPlayer.OnErrorListener 该接口定义了当在异步操作的时候(其他错误将会在呼叫方法的时候抛出异常)出现错误后唤起的回放操作。
接口 MediaPlayer.OnInfoListener 该接口定义了与一些关于媒体或它的播放的信息以及/或者警告相关的被唤起的回放
接口 MediaPlayer.OnPreparedListener 接口定义为媒体的资源准备播放的时候唤起回放准备的
接口 MediaPlayer.OnSeekCompleteListener 该接口定义了指明查找操作完成后唤起的回放操作
接口 MediaPlayer.OnVideoSizeChangedListener 该接口定义了当视频大小被首次知晓或更新的时候唤起的回放
常量
int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK 视频流及其容器时不支持连续的非处于播放文件内的播放视频序列
int MEDIA_ERROR_SERVER_DIED 媒体服务终止
int MEDIA_ERROR_UNKNOWN 未指明的媒体播放错误
int MEDIA_INFO_BAD_INTERLEAVING 不正确的交叉存储技术意味着媒体被不适当的交叉存储或者根本就没有交叉存储,例子里面有所有的视频和音频例子。
int MEDIA_INFO_METADATA_UPDATE 一套新的可用的元数据
int MEDIA_INFO_NOT_SEEKABLE 媒体位置不可查找
int MEDIA_INFO_UNKNOWN 未指明的媒体播放信息
int MEDIA_INFO_VIDEO_TRACK_LAGGING 视频对于解码器太复杂以至于不能解码足够快的帧率
公共构造方法
MediaPlayer()
默认构造方法.
公共方法
static MediaPlayer create(Context context, Uri uri)
根据给定的uri方便的创建MediaPlayer对象的方法.
static MediaPlayer create(Context context, int resid)
根据给定的资源id方便的创建MediaPlayer对象的方法.
static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder)
根据给定的uri方便的创建MediaPlayer对象的方法.
int getCurrentPosition()
获得当前播放的位置
int getDuration()
获得文件段
int getVideoHeight()
获得视频的高度
int getVideoWidth()
获得视频的宽度
boolean isLooping()
检查MedioPlayer处于循环与否
boolean isPlaying()
检查MedioPlayer是否在播放
void pause()
暂停播放
void prepare()
让播放器处于准备状态(同步的)
void prepareAsync()
让播放器处于准备状态(异步的)
void release()
释放与MediaPlayer相关的资源
void reset()
重置MediaPlayer到初始化状态
void seekTo(int msec)
搜寻指定的时间位置
void setAudioStreamType(int streamtype)
为MediaPlayer设定音频流类型.
void setDataSource(String path)
设定使用的数据源(文件路径或http/rtsp地址)
void setDataSource(FileDescriptor fd, long offset, long length)
设定使用的数据源(filedescriptor)
void setDataSource(FileDescriptor fd)
设定使用的数据源(filedescriptor)
void setDataSource(Context context, Uri uri)
设定一个如Uri内容的数据源
void setDisplay(SurfaceHolder sh)
设定播放该Video的媒体播放器的SurfaceHolder
void setLooping(boolean looping)
设定播放器循环或是不循环
void setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
注册一个当网络缓冲数据流变化的时候唤起的播放事件
void setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
注册一个当媒体资源在播放的时候到达终点时唤起的播放事件
void setOnErrorListener(MediaPlayer.OnErrorListener listener)
注册一个当在异步操作过程中发生错误的时候唤起的播放事件
void setOnInfoListener(MediaPlayer.OnInfoListener listener)
注册一个当有信息/警告出现的时候唤起的播放事件
void setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
注册一个当媒体资源准备播放时候唤起的播放事件
void setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)
注册一个当搜寻操作完成后唤起的播放事件
void setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
注册一个当视频大小知晓或更新后唤起的播放事件
void setScreenOnWhilePlaying(boolean screenOn)
控制当视频播放发生时是否使用SurfaceHolder来保持屏幕
void setVolume(float leftVolume, float rightVolume)
设置播放器的音量
void setWakeMode(Context context, int mode)
为MediaPlayer设置低等级的电源管理状态
void start()
开始或恢复播放
void stop()
停止播放
Stops playback after playback has been stopped or paused.
私有方法
void finalize()
在对象的虚拟机被回收之前呼叫
[扩展]
继承的方法
From class java.lang.Object
Object clone()
创建并返回这个对象的一个复制.
boolean equals(Object o)
比较指定对象的实例并指明它们是否相等
void finalize()
在对象的虚拟机被虚拟机回收前呼叫
final Class<? extends Object> getClass()
返回代表这个类的唯一实例
int hashCode()
返回这个对象的整数哈希码
final void notify()
控制一个等待这个对象的监视器的线程苏醒
final void notifyAll()
控制所有等待这个对象的监视器的线程苏醒
String toString()
返回这个对象的简洁的、人类可读的描述的字符串信息
final void wait(long millis, int nanos)
控制线程等待直到另外线程呼叫这个对象的notify()或notifyAll()方法或者直到指定的超时时间到期
final void wait(long millis)
控制线程等待直到另外线程呼叫这个对象的notify()或notifyAll()方法或者直到指定的超时时间到期
final void wait()
控制线程等待直到另外线程呼叫这个对象的notify()或notifyAll()方法或者直到指定的超时时间到期
常量
public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK
Since: API Level 3
视频流及其容器时不支持连续的非处于播放文件内的播放视频序列
也可看
MediaPlayer.OnErrorListener
常量值: 200 (0x000000c8)
public static final int MEDIA_ERROR_SERVER_DIED
自: API版本 1
媒体服务终止. 在此情况下,应用必须释放这个MediaPlayer对象然后重新实例化一个新的。
也可看
MediaPlayer.OnErrorListener
常量值: 100 (0×00000064)
public static final int MEDIA_ERROR_UNKNOWN
自: API 版本 1
未知的媒体播放错误
也可看
MediaPlayer.OnErrorListener
常量值: 1 (0×00000001)
public static final int MEDIA_INFO_BAD_INTERLEAVING
Since: API版本3
不正确的交叉存储技术意味着媒体被不适当的交叉存储或者根本就没有交叉存储,例子里面有所有的视频和音频例子。视频正播放但大量的磁盘查找会发生。也可看
MediaPlayer.OnInfoListener
常量值: 800 (0×00000320)
public static final int MEDIA_INFO_METADATA_UPDATE
Since: API 版本 5
一套新的可用的媒体数据。
也可看
MediaPlayer.OnInfoListener
常量值: 802 (0×00000322)
public static final int MEDIA_INFO_NOT_SEEKABLE
Since: API版本3
这个媒体不可搜寻
也可看
MediaPlayer.OnInfoListener
常量值: 801 (0×00000321)
public static final int MEDIA_INFO_UNKNOWN
Since: API版本3
未知的媒体播放信息
也可看
MediaPlayer.OnInfoListener
常量值: 1 (0×00000001)
public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING
Since: API版本3
视频信息台复杂了以至于解码器无法解析出足够快的帧率,在个这个状态也也许只有声频能够正常播放。
也可看
MediaPlayer.OnInfoListener
常量值: 700 (0x000002bc)
公共构造方法
public MediaPlayer ()
自: API版本1
默认构造方法:以一个Uri或是资源使用一个同步的create()方法来初始化一个MediaPlayer对象当着个MediaPlayer完成后,应该呼叫release()释放资源,如果你不释放,太多的MediaPlayer实例可能导致异常。
公共 Methods
public static MediaPlayer create (Context context, Uri uri)
Since: API版本1
方便的从一个给定的Uri来创建一个MediaPlayer,成功后,prepare()已经被调用了并且不能再次被调用。当完成MediaPlayer以后,必须呼叫release()以释放资源。
参数
context 使用的内容
uri 获得数据源的Uri
返回
一个MeidaPlayer对象,若创建失败则返回为空
public static MediaPlayer create (Context context, int resid)
Since: API版本1
从一个给定的资源id方便的创建一个MediaPlayer,成功创建后,prepare()将已经被呼叫并且不能再次被呼叫。一旦MediaPlayer完成,必须呼叫release()以释放资源,若不释放,太多的MediaPlayer实例将会导致异常。
参数
context 使用的内容
resid 获得数据源的源资源id (R.raw.<something>)
返回
一个MediaPlayer对象,若创建失败则返回为空
public static MediaPlayer create (Context context, Uri uri, SurfaceHolder holder)
自: API 版本 1
以给定的Uri方便的创建一个MediaPlayer对象,成功创建后,Prepare()将已经被呼叫并且必须不能再次呼叫,一旦MediaPlayer完成,必须呼叫release()以释放资源,若不释放,太多的MediaPlayer实例将会导致异常。
参数
context 使用的内哦那个
uri 获得数据源的Uri
holder 显示视频信息的SurfaceHolder
返回
一个MediaPlayer对象,若创建失败则返回为空
public int getCurrentPosition ()
自: API版本1
获得当前播放的位置
返回
当前播放的毫秒位置
public int getDuration ()
自: API版本1
获得文件片段
返回
片段的毫秒数
public int getVideoHeight ()
自: API版本1
获得视频的高度
返回
视频的高度,如果没有视频、没有设置surface或是高度还没有被设定则是0,OnVideoSizeChangedListener可以通过setOnVideoSizeChangedListener(OnVideoSizeChanged Listener)注册在高度可用的时候提供一个提醒。
public int getVideoWidth ()
自: API版本1
获得视频的宽度
返回
视频的宽度,如果没有视频、没有设置surface或是宽度还没有被设定则是0,OnVideoSizeChangedListener可以通过setOnVideoSizeChangedListener(OnVideoSizeChanged Listener)注册在宽度可用的时候提供一个提醒。
public boolean isLooping ()
自: API 版本 3
检查MediaPlayer是否循环
返回
如果MediaPalyer当前处于循环则返回true,否则为false
public boolean isPlaying ()
自: API 版本 1
检查MediaPalyer是否正在播放
返回
如果当前正在播放则返回true,否则为false
public void pause ()
自: API 版本 1
暂停播放,呼叫start()恢复播放.
抛出
IllegalStateException 如果内部播放引擎没有被实例化.
public void prepare ()
自: API 版本 1
使播放器为播放做准备,同步的。在设置好数据源和显示界面后,你可以呼叫prepare()或者prepareAsync(),如果对于文件,最好使用能封锁住MediaPlayer知道准备播放的prepare().
抛出
IllegalStateException 如果在无效状态被呼叫
IOException
public void prepareAsync ()
自: API 版本 1
使播放器为播放做准备,异步的。在设置好数据源和显示界面后,你可以呼叫prepare()或者prepareAsync(), 对于数据流,最好使用即时的PrepareAsync(),比起锁定数据直到有足够缓冲数据更好。
抛出
IllegalStateException 如果在无效的状态被呼叫
public void release ()
自: API 版本 1
释放与MediaPlayer对象相关的资源,在完成使用MediaPlayer后呼叫该方法是一个很好的习惯。
public void reset ()
自: API 版本 1
重设MediaPlayer到未初始化状态,在调用该方法后,需要通过设定数据初始化然后呼叫prepare().
public void seekTo (int msec)
自: API 版本 1
搜寻指定的时间位置
参数
msec 从开始到搜寻位置的位移
抛出
IllegalStateException 如果内部播放引擎没有被初始化
public void setAudioStreamType (int streamtype)
自: API 版本 1
设定MediaPlayer的音频流类型,可以查看AudioManager获得流类型清单。
参数
streamtype 音频流类型
也可看
AudioManager
public void setDataSource (String path)
自: API 版本 1
设置使用的数据资源(file-path 或http/rtsp URL)。
参数
path 文件路径或想要播放的流的http/rtsp URL
抛出
IllegalStateException 如果在无效状态呼叫
IOException
IllegalArgumentException
public void setDataSource (FileDescriptor fd, long offset, long length)
自: API 版本 1
设置使用的数据资源(FileDescriptor),该FileDescriptor必须是可搜寻的,关闭这个文件描述是呼叫者的责任,在呼叫返回后越早做越安全。
参数
fd 想要播放文件的文件描述
offset 文件开始播放位置的位移,以字节形式。
length 数据播放的字节长度
抛出
IllegalStateException 如果在无效状态呼叫
IOException
IllegalArgumentException
public void setDataSource (FileDescriptor fd)
自: API 版本 1
设置使用的数据资源(FileDescriptor),关闭这个文件描述是呼叫者的责任,在呼叫返回后越早做越安全。
参数
fd 想要播放文件的文件描述
抛出
IllegalStateException 如果在无效状态呼叫
IOException
IllegalArgumentException
public void setDataSource (Context context, Uri uri)
自: API 版本 1
设置如Uri相似的数据资源
参数
context 解析 Uri所要使用的内容
uri 想要播放的Uri
抛出
IllegalStateException 如果在无效状态呼叫
IOException
IllegalArgumentException
SecurityException
public void setDisplay (SurfaceHolder sh)
自: API 版本 1
设置在播放视频时显示的部分,这个调用很随意,当在重新播放视频的时候不调用它会导致只有声音在播放。
参数
sh 用于视频显示的SurfaceHolder
public void setLooping (boolean looping)
自: API 版本 1
设置播放器循环或是不循环,。
参数
looping 循环或不循环
Public voidsetOnBufferingUpdateListener (MediaPlayer.OnBufferingUpdateListe ner listener)
自: API 版本 1
注册一个在网络数据缓冲流变换的时候可以唤起的回放事件。
参数
listener 将要运行的播放事件.
public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)
自: API 版本 1
注册一个在播放时到达媒体资源的终点的时候唤起的播放事件。
参数
listener 将要运行的播放事件.
public void setOnErrorListener (MediaPlayer.OnErrorListener listener)
自: API 版本 1
注册一个在一个异步操作过程中出现错误的时候唤起的播放事件。
参数
listener 将要运行的播放事件
public void setOnInfoListener (MediaPlayer.OnInfoListener listener)
自: API 版本 3
注册一个当信息/警告可用的时候唤起的播放事件。
参数
listener 将要运行的播放事件
public void setOnPreparedListener (MediaPlayer.OnPreparedListener listener)
自: API 版本 1
注册一个当媒体播放资源准备好播放的时候唤起的播放事件。
参数
listener 将要运行的播放事件
public void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener)
自: API 版本 1
注册一个当搜寻操作完成后唤起的播放事件。
参数
listener 将要运行的播放事件
Public voidsetOnVideoSizeChangedListener (MediaPlayer.OnVideoSizeChangedLi stener listener)
自: API 版本 3
注册一个当视频大小知晓后或更新后唤起的播放事件。
参数
listener 将要运行的播放事件
public void setScreenOnWhilePlaying (boolean screenOn)
自: API 版本 1
控制当视频播放发生时是否使用SurfaceHolder来保持屏幕,这是个在可能的地方首选级别在setWakeMode之上的方法,因为它不需要应用获得进入低等级锁定的权限
参数
screenOn True则保持屏幕显示,false则允许关闭
public void setVolume (float leftVolume, float rightVolume)
自: API 版本 1
设置该播放器的音量,这个API被推荐来平衡应用内部的音频流输出,除非你写出应用来控制用户的设置,这个API优先于设置所有特定类型的声音的setStreamVolume(int,int,int)来使用。
参数
leftVolume 左声音标准
rightVolume 右声音标准
public void setWakeMode (Context context, int mode)
自: API 版本 1
为MediaPlayer设置低等级的电源管理性能,当MediaPlayer通过setDisplay(SurfaceHolder)设定的SurfaceHolder无法播放的时候从而可以使用高等级setScreenOnWhilePlaying(boolean)设定的时候使用。
当播放进行的时候这个功能可以使MediaPlayer取得低等级电源管理服务从而控制设备的电源使用。使用这个方法需要取得WAKE_LOCK权限,默认的,在播放时没有任何使设备唤醒的企图。
参数
context 使用的内容
mode 设定的供电/觉醒模式
也可看
PowerManager
public void start ()
自: API 版本 1
开始或重新播放,如果播放预先暂停了,播放将继续从被暂停的地方继续,如果播放被停止了,或没有再次开始前,播放将从最开始播放。
抛出
IllegalStateException 如果在无效状态被呼叫
public void stop ()
自: API 版本 1
停止播放
抛出
IllegalStateException 如果内部播放引擎没有被初始化
私有方法
protected void finalize ()
public class
MediaPlayer
继承自 Object
java.lang.Object
android.media.MediaPlayer
该类概述
MediaPlayer 能被用来控制音频/视频文件或流媒体的回放,可以在VideoView里找到关于如何使用这个该类中的这个方法的例子。请参看Audio and Video以获得使用MediaPlayer 的额外帮助。
包括的主题:
1.状态图
2.有效或无效状态
3.权限
状态图
音频/视频文件或流媒体的回放控制是以状态机的形式管理的。下面的状态图显示了被回放控制操作支持的MediaPlayer 的生命周期和状态。椭圆形代表MediaPlayer 可以存在的状态,弧线代表推动状态转换的回放控制操作。有两种弧线类型,有单箭头的弧线代表同步的调用方法,双箭头的则代表异步方式。
从这个状态图中, 可以看出一个MedioPlayer有以下几个状态:
1、当一个MediaPlayer 使用new或在reset()被呼叫的方式创建后,它就处于Idle(空闲)状态,当release()被呼叫后,就处于End(结束)状态,在这两个状态间的就是MediaPlayer 的生命周期。
在一个用new构造的MediaPlayer 对象和呼叫reset()方式创建MediaPlayer对象间有个微小但很重要的区别,两者在Idle状态调用诸如getCurrentPosition(), getDuration(), getVideoHeight(), getVideoWidth(), setAudioStreamType(int), setLooping(boolean), setVolume(float, float), pause(), start(), stop(), seekTo(int), prepare() 或prepareAsync()的时候有一个程序设计错误,如果在MediaPlayer对象创建后两者两种方式都被正确的呼叫,用户提供回调方法OnErrorList ener.onError() 将不会被内部的播放引擎呼叫并且对象的状态仍然保持不变。但是如果这些方法在呼叫reset()后被正确的呼叫,那么用户提供的回调方法OnErrorListener.onError()将被内部的播放引擎唤起并且这个对象将转换为Error状态。需要提到的是一旦MediaPlayer对象不再被使用到,为保证与MediaPlayer相关的内部播放引擎所使用的资源能够马上得到释放应立即呼叫release()方法。该资源可能包含单例模式的信息如硬件加速组件所以呼叫release()失败可能会导致后来的MediaPlayer对象实例退到软件的实现或一起失败。一旦fallback to对象处于End状态,它就不再被使用且不再有任何方式让它重新回到其他的状态。此外,使用new创建的MediaPlayer对象是处于Idle状态的,而其他用方便的重载create方法的MediaPlayer对象则不处于Idle状态,事实上,使用create方法成功创建的MediaPlayer对象是处于Prepared状态的。
2.通常,一些播放控制操作会由于多种原因导致失败,如不支持的音频/视频格式,杂*交错的音频/视频、分辨率太高、数据流超时等等,因此,在此情况下,错误记录和报告是一个值得着重关心的事情。有时,由于程序设计的错误在不适当的状态请求播放控制操作也可能导致失败。在所有的出错条件下,如果预先由setOnErrorListener(android.media.MediaPlayer.OnErrorList ener).注册后内部播放引擎会调用用户提供的OnErrorListener.onError()方法。
一旦错误发生而记录它是很重要的,即使错误监听没有在程序里面注册MediaPlayer对象也会进入Error状态。
为了重新使用错误状态的MediaPlayer对象使它错误状态下恢复,可以呼叫reset()来把这个对象恢复到Idle状态。
在你的程序里注册错误监听来从内部播放引擎中查找错误信息是一个好的程序设计做法。
在错误状态异常抛出以阻止程序的错误如呼叫prepare(),prepareAsync(),或在一个无效的状态重载setDataSource方法。
呼叫setDataSource(FileDescriptor), 或setDataSource(String), 或setDataSource (Context, Uri), 或setDataSource(FileDescriptor, long, long)转变一个处于Idle状态的MediaPlayer到初始化状态。
如果在其他的任何状态呼叫setDataSource()方法那么就会抛出错误状态异常。
在重载setDataSource()方法的时候检查错误状态异常和IO异常时一个良好的编程习惯。
MediaPlayer对象在播放开始前必须首先进入Prepared(准备)状态。
有两种方式(同步和异步)可以达到Prepared(准备)状态的目的:一旦这个方法返回的时候呼叫prepare()(同步的)以使这个对象转换为Prepare状态,或者当内部播放引擎在准备继续做其他剩余的准备工作的时候在呼叫返回(以正确的方式发生)后转换这个对象到准备状态直到准备工作完成。当准备工作完成或者当prepare()呼叫返回,内部播放引擎按后呼叫用户提供的播放方法,OnPreparedListener接口的onPrepared()方法,前提是这个接口之前注册过setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener).
值得注意的是准备状态时一个过渡的状态,当MediaPlayer对象在准备状态未明确的定义的时候就会在呼叫任何方法的时候产生副作用,如果prepare()或perpareAsync()在任何其他状态被呼叫就会抛出状态错误异常。
当处于准备状态的时候,比如音频/声音的音量、播放屏幕、可以通过唤起相应的设置方法来矫正。
为了开始播放,start()必须被呼叫,在start()成功返回后,MediaPlayer对象就处于开始状态了,可以用isPlaying()方法来测试MediaPlayer对象是否处于开始状态。
当处于开始状态的时候,如果用户提供的OnBufferingUpdateListener.onBufferingUpdate()在先前通过setOnBufferingUpdateListener(OnBufferingUpdateListener)注册过的话,内部播放引擎会呼叫用户提供的该方法。
这种播放允许应用在取得音频/视频流的时候保持缓冲的数据记录。
呼叫start()不会影响到处于开始状态的MediaPlayer对象,播放可以被暂停可停止,并且当前的播放位置可以调节,可以通过pause()方法来暂停播放,当呼叫pause()后,MediaPlayer对象就处于暂停状态了,注意到从开始到暂停状态的转换和暂停到开始的转换时一样的道理,可以在状态更新前呼叫isPlaying(),在数据填充填充内容后它会花若干秒的时间。
在暂停状态会叫start()方法可以重新恢复播放状态,并且重新播放的位置和暂停时候的位置是一样的,当呼叫start()后,MediaPlayer对象返回到开始状态。
在暂停状态会叫pause()对MediaPlayer对象毫无影响,呼叫stop()停止播放,控制处于开始、暂停、准备或播放完成状态的MediaPlayer进入停止状态。
一旦处于停止状态,播放在呼叫prepare()或prepaeAsync()以设置MediaPlayer对象到准备状态之前是无法开始播放的。
即使异步方法seekTo(int)在正确的方式呼叫后,实际的查找操作也可能需要一段时间去完成,特别是对于audio/video数据流。当实际查找操作完成后,内部播放引擎会呼叫用户提供OnSeekComplete.onSeekComplete()方法,前提是先前的OnSeekCompletedListener通过setOnSeekCompletedListener(OnSeekCompleteListener)注册过的话。
需要注意的是seekTo(int)也可以在其他状态诸如准备、暂停、播放完成等被呼叫。
此外,可以通过呼叫getCurrentPosition()以取得当前的播放位置,这会对一些应用比如需要保持播放进度纪录的音乐播放器将很有用。
当播放到达数据流的终点时,播放即完成。如果循环状态被setLooping(boolean)设为true,那么MediaPlayer对象应该会重新进入开始状态。如被设为false,播放引擎会呼叫用户提供的回放方法OnCompletion.onCompletion(),前提是OncompletionListener先前被SetOnCompletionListener(OnCompletionListener)注册过。调用的播放会表明这个对象现在是处于播放完成状态中。
当处于播放完成状态中时,呼叫start()可以重新使音频/视频资源播放。
有效和无效的状态:
方法名 有效状态 无效状态 说明
getCurrentPosition {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
getDuration {Prepared, Started, Paused, Stopped, PlaybackCompleted} {Idle, Initialized, Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
getVideoHeight {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
getVideoWidth {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
isPlaying {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
pause {Started, Paused} {Idle, Initialized, Prepared, Stopped, PlaybackCompleted, Error} 在有效状态成功呼叫该方法改变此时的状态到暂停状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中.
prepare {Initialized, Stopped} {Idle, Prepared, Started, Paused, PlaybackCompleted, Error} 在有效状态成功呼叫该方法改变此时的状态到准备状态,在无效的状态呼叫该方法则会抛出错误状态异常
prepareAsync {Initialized, Stopped} {Idle, Prepared, Started, Paused, PlaybackCompleted, Error} 在有效状态成功呼叫该方法改变此时的状态到准备状态,在无效的状态呼叫该方法则会抛出错误状态异常
release any {} 在release()该对象不再是可用的
reset {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} {} 在reset()后该对象如刚创建的一样
seekTo {Prepared, Started, Paused, PlaybackCompleted} {Idle, Initialized, Stopped, Error} 在有效状态成功呼叫该方法改变此时的状态到暂停状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
setAudioStreamType {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法改变此时的状态到暂停状态
setDataSource {Idle} {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} 在有效状态成功呼叫该方法改变此时的状态到初始化状态,在无效的状态呼叫该方法则会抛出错误状态异常
setDisplay any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setLooping {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} {Error} 在有效状态成功呼叫该方法不会改变此时的状态,在无效的状态呼叫该方法则会使该状态转换到错误状态中
isLooping any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnBufferingUpdateListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnCompletionListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnErrorListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnPreparedListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setOnSeekCompleteListener any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setScreenOnWhilePlaying any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
setVolume {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} {Error} 成功调用该方法不会改变当前的状态
setWakeMode any {} 在任何状态都可以呼叫该方法且不会改变当前对象的状态
start {Prepared, Started, Paused, PlaybackCompleted} {Idle, Initialized, Stopped, Error} 在有效状态成功呼叫该方法改变此时的状态到开始状态,在无效的状态呼叫该方法则会转换到错误状态
stop {Prepared, Started, Stopped, Paused, PlaybackCompleted} {Idle, Initialized, Error} 在有效状态成功呼叫该方法改变此时的状态到停止状态,在无效的状态呼叫该方法则会转换到错误状态
权限
需要声明一个WAKE_LOCK相应的权限<uses-permission>
摘要
Nested Classes
接口 MediaPlayer.OnBufferingUpdateListener 该接口定义了唤起指明网络上的媒体资源以缓冲流的形式播放
接口 MediaPlayer.OnCompletionListener 该接口是为当媒体资源的播放完成后被唤起的回放定义的
接口 MediaPlayer.OnErrorListener 该接口定义了当在异步操作的时候(其他错误将会在呼叫方法的时候抛出异常)出现错误后唤起的回放操作。
接口 MediaPlayer.OnInfoListener 该接口定义了与一些关于媒体或它的播放的信息以及/或者警告相关的被唤起的回放
接口 MediaPlayer.OnPreparedListener 接口定义为媒体的资源准备播放的时候唤起回放准备的
接口 MediaPlayer.OnSeekCompleteListener 该接口定义了指明查找操作完成后唤起的回放操作
接口 MediaPlayer.OnVideoSizeChangedListener 该接口定义了当视频大小被首次知晓或更新的时候唤起的回放
常量
int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK 视频流及其容器时不支持连续的非处于播放文件内的播放视频序列
int MEDIA_ERROR_SERVER_DIED 媒体服务终止
int MEDIA_ERROR_UNKNOWN 未指明的媒体播放错误
int MEDIA_INFO_BAD_INTERLEAVING 不正确的交叉存储技术意味着媒体被不适当的交叉存储或者根本就没有交叉存储,例子里面有所有的视频和音频例子。
int MEDIA_INFO_METADATA_UPDATE 一套新的可用的元数据
int MEDIA_INFO_NOT_SEEKABLE 媒体位置不可查找
int MEDIA_INFO_UNKNOWN 未指明的媒体播放信息
int MEDIA_INFO_VIDEO_TRACK_LAGGING 视频对于解码器太复杂以至于不能解码足够快的帧率
公共构造方法
MediaPlayer()
默认构造方法.
公共方法
static MediaPlayer create(Context context, Uri uri)
根据给定的uri方便的创建MediaPlayer对象的方法.
static MediaPlayer create(Context context, int resid)
根据给定的资源id方便的创建MediaPlayer对象的方法.
static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder)
根据给定的uri方便的创建MediaPlayer对象的方法.
int getCurrentPosition()
获得当前播放的位置
int getDuration()
获得文件段
int getVideoHeight()
获得视频的高度
int getVideoWidth()
获得视频的宽度
boolean isLooping()
检查MedioPlayer处于循环与否
boolean isPlaying()
检查MedioPlayer是否在播放
void pause()
暂停播放
void prepare()
让播放器处于准备状态(同步的)
void prepareAsync()
让播放器处于准备状态(异步的)
void release()
释放与MediaPlayer相关的资源
void reset()
重置MediaPlayer到初始化状态
void seekTo(int msec)
搜寻指定的时间位置
void setAudioStreamType(int streamtype)
为MediaPlayer设定音频流类型.
void setDataSource(String path)
设定使用的数据源(文件路径或http/rtsp地址)
void setDataSource(FileDescriptor fd, long offset, long length)
设定使用的数据源(filedescriptor)
void setDataSource(FileDescriptor fd)
设定使用的数据源(filedescriptor)
void setDataSource(Context context, Uri uri)
设定一个如Uri内容的数据源
void setDisplay(SurfaceHolder sh)
设定播放该Video的媒体播放器的SurfaceHolder
void setLooping(boolean looping)
设定播放器循环或是不循环
void setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
注册一个当网络缓冲数据流变化的时候唤起的播放事件
void setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
注册一个当媒体资源在播放的时候到达终点时唤起的播放事件
void setOnErrorListener(MediaPlayer.OnErrorListener listener)
注册一个当在异步操作过程中发生错误的时候唤起的播放事件
void setOnInfoListener(MediaPlayer.OnInfoListener listener)
注册一个当有信息/警告出现的时候唤起的播放事件
void setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
注册一个当媒体资源准备播放时候唤起的播放事件
void setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)
注册一个当搜寻操作完成后唤起的播放事件
void setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
注册一个当视频大小知晓或更新后唤起的播放事件
void setScreenOnWhilePlaying(boolean screenOn)
控制当视频播放发生时是否使用SurfaceHolder来保持屏幕
void setVolume(float leftVolume, float rightVolume)
设置播放器的音量
void setWakeMode(Context context, int mode)
为MediaPlayer设置低等级的电源管理状态
void start()
开始或恢复播放
void stop()
停止播放
Stops playback after playback has been stopped or paused.
私有方法
void finalize()
在对象的虚拟机被回收之前呼叫
[扩展]
继承的方法
From class java.lang.Object
Object clone()
创建并返回这个对象的一个复制.
boolean equals(Object o)
比较指定对象的实例并指明它们是否相等
void finalize()
在对象的虚拟机被虚拟机回收前呼叫
final Class<? extends Object> getClass()
返回代表这个类的唯一实例
int hashCode()
返回这个对象的整数哈希码
final void notify()
控制一个等待这个对象的监视器的线程苏醒
final void notifyAll()
控制所有等待这个对象的监视器的线程苏醒
String toString()
返回这个对象的简洁的、人类可读的描述的字符串信息
final void wait(long millis, int nanos)
控制线程等待直到另外线程呼叫这个对象的notify()或notifyAll()方法或者直到指定的超时时间到期
final void wait(long millis)
控制线程等待直到另外线程呼叫这个对象的notify()或notifyAll()方法或者直到指定的超时时间到期
final void wait()
控制线程等待直到另外线程呼叫这个对象的notify()或notifyAll()方法或者直到指定的超时时间到期
常量
public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK
Since: API Level 3
视频流及其容器时不支持连续的非处于播放文件内的播放视频序列
也可看
MediaPlayer.OnErrorListener
常量值: 200 (0x000000c8)
public static final int MEDIA_ERROR_SERVER_DIED
自: API版本 1
媒体服务终止. 在此情况下,应用必须释放这个MediaPlayer对象然后重新实例化一个新的。
也可看
MediaPlayer.OnErrorListener
常量值: 100 (0×00000064)
public static final int MEDIA_ERROR_UNKNOWN
自: API 版本 1
未知的媒体播放错误
也可看
MediaPlayer.OnErrorListener
常量值: 1 (0×00000001)
public static final int MEDIA_INFO_BAD_INTERLEAVING
Since: API版本3
不正确的交叉存储技术意味着媒体被不适当的交叉存储或者根本就没有交叉存储,例子里面有所有的视频和音频例子。视频正播放但大量的磁盘查找会发生。也可看
MediaPlayer.OnInfoListener
常量值: 800 (0×00000320)
public static final int MEDIA_INFO_METADATA_UPDATE
Since: API 版本 5
一套新的可用的媒体数据。
也可看
MediaPlayer.OnInfoListener
常量值: 802 (0×00000322)
public static final int MEDIA_INFO_NOT_SEEKABLE
Since: API版本3
这个媒体不可搜寻
也可看
MediaPlayer.OnInfoListener
常量值: 801 (0×00000321)
public static final int MEDIA_INFO_UNKNOWN
Since: API版本3
未知的媒体播放信息
也可看
MediaPlayer.OnInfoListener
常量值: 1 (0×00000001)
public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING
Since: API版本3
视频信息台复杂了以至于解码器无法解析出足够快的帧率,在个这个状态也也许只有声频能够正常播放。
也可看
MediaPlayer.OnInfoListener
常量值: 700 (0x000002bc)
公共构造方法
public MediaPlayer ()
自: API版本1
默认构造方法:以一个Uri或是资源使用一个同步的create()方法来初始化一个MediaPlayer对象当着个MediaPlayer完成后,应该呼叫release()释放资源,如果你不释放,太多的MediaPlayer实例可能导致异常。
公共 Methods
public static MediaPlayer create (Context context, Uri uri)
Since: API版本1
方便的从一个给定的Uri来创建一个MediaPlayer,成功后,prepare()已经被调用了并且不能再次被调用。当完成MediaPlayer以后,必须呼叫release()以释放资源。
参数
context 使用的内容
uri 获得数据源的Uri
返回
一个MeidaPlayer对象,若创建失败则返回为空
public static MediaPlayer create (Context context, int resid)
Since: API版本1
从一个给定的资源id方便的创建一个MediaPlayer,成功创建后,prepare()将已经被呼叫并且不能再次被呼叫。一旦MediaPlayer完成,必须呼叫release()以释放资源,若不释放,太多的MediaPlayer实例将会导致异常。
参数
context 使用的内容
resid 获得数据源的源资源id (R.raw.<something>)
返回
一个MediaPlayer对象,若创建失败则返回为空
public static MediaPlayer create (Context context, Uri uri, SurfaceHolder holder)
自: API 版本 1
以给定的Uri方便的创建一个MediaPlayer对象,成功创建后,Prepare()将已经被呼叫并且必须不能再次呼叫,一旦MediaPlayer完成,必须呼叫release()以释放资源,若不释放,太多的MediaPlayer实例将会导致异常。
参数
context 使用的内哦那个
uri 获得数据源的Uri
holder 显示视频信息的SurfaceHolder
返回
一个MediaPlayer对象,若创建失败则返回为空
public int getCurrentPosition ()
自: API版本1
获得当前播放的位置
返回
当前播放的毫秒位置
public int getDuration ()
自: API版本1
获得文件片段
返回
片段的毫秒数
public int getVideoHeight ()
自: API版本1
获得视频的高度
返回
视频的高度,如果没有视频、没有设置surface或是高度还没有被设定则是0,OnVideoSizeChangedListener可以通过setOnVideoSizeChangedListener(OnVideoSizeChanged Listener)注册在高度可用的时候提供一个提醒。
public int getVideoWidth ()
自: API版本1
获得视频的宽度
返回
视频的宽度,如果没有视频、没有设置surface或是宽度还没有被设定则是0,OnVideoSizeChangedListener可以通过setOnVideoSizeChangedListener(OnVideoSizeChanged Listener)注册在宽度可用的时候提供一个提醒。
public boolean isLooping ()
自: API 版本 3
检查MediaPlayer是否循环
返回
如果MediaPalyer当前处于循环则返回true,否则为false
public boolean isPlaying ()
自: API 版本 1
检查MediaPalyer是否正在播放
返回
如果当前正在播放则返回true,否则为false
public void pause ()
自: API 版本 1
暂停播放,呼叫start()恢复播放.
抛出
IllegalStateException 如果内部播放引擎没有被实例化.
public void prepare ()
自: API 版本 1
使播放器为播放做准备,同步的。在设置好数据源和显示界面后,你可以呼叫prepare()或者prepareAsync(),如果对于文件,最好使用能封锁住MediaPlayer知道准备播放的prepare().
抛出
IllegalStateException 如果在无效状态被呼叫
IOException
public void prepareAsync ()
自: API 版本 1
使播放器为播放做准备,异步的。在设置好数据源和显示界面后,你可以呼叫prepare()或者prepareAsync(), 对于数据流,最好使用即时的PrepareAsync(),比起锁定数据直到有足够缓冲数据更好。
抛出
IllegalStateException 如果在无效的状态被呼叫
public void release ()
自: API 版本 1
释放与MediaPlayer对象相关的资源,在完成使用MediaPlayer后呼叫该方法是一个很好的习惯。
public void reset ()
自: API 版本 1
重设MediaPlayer到未初始化状态,在调用该方法后,需要通过设定数据初始化然后呼叫prepare().
public void seekTo (int msec)
自: API 版本 1
搜寻指定的时间位置
参数
msec 从开始到搜寻位置的位移
抛出
IllegalStateException 如果内部播放引擎没有被初始化
public void setAudioStreamType (int streamtype)
自: API 版本 1
设定MediaPlayer的音频流类型,可以查看AudioManager获得流类型清单。
参数
streamtype 音频流类型
也可看
AudioManager
public void setDataSource (String path)
自: API 版本 1
设置使用的数据资源(file-path 或http/rtsp URL)。
参数
path 文件路径或想要播放的流的http/rtsp URL
抛出
IllegalStateException 如果在无效状态呼叫
IOException
IllegalArgumentException
public void setDataSource (FileDescriptor fd, long offset, long length)
自: API 版本 1
设置使用的数据资源(FileDescriptor),该FileDescriptor必须是可搜寻的,关闭这个文件描述是呼叫者的责任,在呼叫返回后越早做越安全。
参数
fd 想要播放文件的文件描述
offset 文件开始播放位置的位移,以字节形式。
length 数据播放的字节长度
抛出
IllegalStateException 如果在无效状态呼叫
IOException
IllegalArgumentException
public void setDataSource (FileDescriptor fd)
自: API 版本 1
设置使用的数据资源(FileDescriptor),关闭这个文件描述是呼叫者的责任,在呼叫返回后越早做越安全。
参数
fd 想要播放文件的文件描述
抛出
IllegalStateException 如果在无效状态呼叫
IOException
IllegalArgumentException
public void setDataSource (Context context, Uri uri)
自: API 版本 1
设置如Uri相似的数据资源
参数
context 解析 Uri所要使用的内容
uri 想要播放的Uri
抛出
IllegalStateException 如果在无效状态呼叫
IOException
IllegalArgumentException
SecurityException
public void setDisplay (SurfaceHolder sh)
自: API 版本 1
设置在播放视频时显示的部分,这个调用很随意,当在重新播放视频的时候不调用它会导致只有声音在播放。
参数
sh 用于视频显示的SurfaceHolder
public void setLooping (boolean looping)
自: API 版本 1
设置播放器循环或是不循环,。
参数
looping 循环或不循环
Public voidsetOnBufferingUpdateListener (MediaPlayer.OnBufferingUpdateListe ner listener)
自: API 版本 1
注册一个在网络数据缓冲流变换的时候可以唤起的回放事件。
参数
listener 将要运行的播放事件.
public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)
自: API 版本 1
注册一个在播放时到达媒体资源的终点的时候唤起的播放事件。
参数
listener 将要运行的播放事件.
public void setOnErrorListener (MediaPlayer.OnErrorListener listener)
自: API 版本 1
注册一个在一个异步操作过程中出现错误的时候唤起的播放事件。
参数
listener 将要运行的播放事件
public void setOnInfoListener (MediaPlayer.OnInfoListener listener)
自: API 版本 3
注册一个当信息/警告可用的时候唤起的播放事件。
参数
listener 将要运行的播放事件
public void setOnPreparedListener (MediaPlayer.OnPreparedListener listener)
自: API 版本 1
注册一个当媒体播放资源准备好播放的时候唤起的播放事件。
参数
listener 将要运行的播放事件
public void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener)
自: API 版本 1
注册一个当搜寻操作完成后唤起的播放事件。
参数
listener 将要运行的播放事件
Public voidsetOnVideoSizeChangedListener (MediaPlayer.OnVideoSizeChangedLi stener listener)
自: API 版本 3
注册一个当视频大小知晓后或更新后唤起的播放事件。
参数
listener 将要运行的播放事件
public void setScreenOnWhilePlaying (boolean screenOn)
自: API 版本 1
控制当视频播放发生时是否使用SurfaceHolder来保持屏幕,这是个在可能的地方首选级别在setWakeMode之上的方法,因为它不需要应用获得进入低等级锁定的权限
参数
screenOn True则保持屏幕显示,false则允许关闭
public void setVolume (float leftVolume, float rightVolume)
自: API 版本 1
设置该播放器的音量,这个API被推荐来平衡应用内部的音频流输出,除非你写出应用来控制用户的设置,这个API优先于设置所有特定类型的声音的setStreamVolume(int,int,int)来使用。
参数
leftVolume 左声音标准
rightVolume 右声音标准
public void setWakeMode (Context context, int mode)
自: API 版本 1
为MediaPlayer设置低等级的电源管理性能,当MediaPlayer通过setDisplay(SurfaceHolder)设定的SurfaceHolder无法播放的时候从而可以使用高等级setScreenOnWhilePlaying(boolean)设定的时候使用。
当播放进行的时候这个功能可以使MediaPlayer取得低等级电源管理服务从而控制设备的电源使用。使用这个方法需要取得WAKE_LOCK权限,默认的,在播放时没有任何使设备唤醒的企图。
参数
context 使用的内容
mode 设定的供电/觉醒模式
也可看
PowerManager
public void start ()
自: API 版本 1
开始或重新播放,如果播放预先暂停了,播放将继续从被暂停的地方继续,如果播放被停止了,或没有再次开始前,播放将从最开始播放。
抛出
IllegalStateException 如果在无效状态被呼叫
public void stop ()
自: API 版本 1
停止播放
抛出
IllegalStateException 如果内部播放引擎没有被初始化
私有方法
protected void finalize ()
发表评论
-
Android APK 签名比对
2014-04-10 14:11 668发布过Android应用的朋友 ... -
Android小知识点
2014-04-10 09:45 7131、 最近翻看以前的项目时候,想更改下布局文件,谁知道就改了 ... -
Android 获取基站信息
2013-10-18 10:39 1060Android 基站分CdmaCellLocation和Gsm ... -
Android 打开PDF,PPT,WORD,EXCEL,CHM,HTML,TEXT,AUDIO,VIDEO 格式文件代码
2013-03-15 16:42 1805import android.app.Activity; im ... -
Android平板上开发App的准则
2013-03-14 11:38 11111、保证符合App的通用开发准则 在谈Android平板A ... -
android程序发布时的常用工具
2012-07-12 14:38 10591.为应用程序设定版本,在应用程序清单文件中设置。 ... -
java CA证书相关操作,Android,java
2012-06-11 16:16 3474一:需要包含的包 import java.securi ... -
Android PhoneGap简析
2012-05-22 10:52 3759前言 上周研究了一下Pho ... -
android播放多媒体的两种方式
2012-05-19 21:42 1038转载,原文地址:http://blog.csdn.net/xi ... -
android通过NFC读写数据
2012-05-17 15:56 4142/* * Writes an NdefMessage to a ... -
NFC相关研究
2012-05-15 14:07 1167NFC概述 NFC是短距离的无线通信,通常距 ... -
Android 面试题
2012-05-15 14:05 993Android 面试题 经典 1、 Android dvm的进 ... -
生成android使用的BKS证书
2012-05-10 12:21 2899生成android使用的BKS证书 android 系统中 ... -
windows+eclipse+cygwin+cdt+ndk
2012-03-07 10:34 1012一:什么是NDK? NDK 提 ... -
在android2.1如何实现对ssl的无证书访问?(转)
2012-03-01 17:25 2631在网上看了,httpchlent的 ... -
Android系统目录结构详解(转)
2012-03-01 10:34 1139Android系统基于linux内核、JAVA应用,算是一 ... -
Android开发规范(转)
2012-03-01 10:20 828Android开发规范 一、Andr ... -
如何让Android程序支持安装到SD卡(APP2SD)
2012-02-29 15:19 1006Android系统在2.1版本之前,应用程序是只能安装到机身内 ... -
生成android的bks证书
2011-07-14 15:40 3330生成android的bks证书 pushd %CD% cd / ... -
系统文件夹功能详谈
2011-07-13 17:46 958【文件夹功能简介】 \system\app 这个里面主要存放 ...
相关推荐
4. **多媒体处理**:Android支持音频、视频、图像的处理,包括MediaPlayer、ExoPlayer、Camera API、Bitmap等。开发者可以通过这些API实现媒体播放、录制、编辑等功能。 5. **传感器和位置服务**:Android提供了对...
包括用户界面构建(如Views和Layouts)、数据存储(如SQLite数据库)、网络通信(如HttpURLConnection和OkHttp)、多媒体处理(如MediaPlayer和ExoPlayer)、位置服务(如GPS和Google Maps API)等。开发者通常需要...
"Android中文API合集"是一个非常有价值的资源,它为开发者提供了全面的API参考文档,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。这份资料详尽地介绍了Android SDK中的各个组件、类库和方法,帮助你理解...
Android API涵盖了Android应用开发的各个方面,包括UI设计(如Activity、Intent、View)、数据存储(SQLite、SharedPreferences)、网络通信(HttpURLConnection、Volley)、多媒体处理(MediaPlayer、ExoPlayer)、...
5. **多媒体**:Android API支持音频、视频和图像的处理,例如MediaPlayer和ExoPlayer用于播放媒体,MediaRecorder用于录制,Camera API用于拍照和录像。 6. **传感器与位置服务**:Android的Sensor API允许访问...
"Android中文API文档(系列汇总)"是一个集合了Android各个组件API的中文参考资料,旨在为开发者提供便捷的查询途径,帮助他们在编程过程中快速找到所需的信息。这篇文档详尽地涵盖了Android系统的各个方面,包括但不...
6. **多媒体支持**:Android支持音频、视频、图像的处理,包括MediaPlayer、ExoPlayer、Camera API等。开发者可以在这里找到如何录制、播放和处理多媒体文件的方法。 7. **传感器和位置服务**:Android API提供了对...
Android API中文帮助文档合集是为Android开发者提供的一份详尽的参考资料,旨在助力开发者更好地理解和使用Android平台的各种功能和接口。这份文档包含了从基础到高级的各类Android开发知识点,覆盖了系统架构、UI...
《Android_API中文版》 Android API是Android操作系统的核心组成部分,它是开发者构建应用程序的接口,提供了丰富的功能和组件,使得开发者可以充分利用Android系统的强大能力。这个压缩包文件包含了多个文档,旨在...
"Android API中文版查询合集"是一个宝贵的资源,它为开发者提供了官方API的中文翻译,使得理解与使用Android API变得更加便捷。 这个合集可能包括了Android各个版本的API文档,从早期的API Level 1一直到最新的API ...
《Android中文API合集》是Android开发者们的重要参考资料,它包含了83篇文章,全面而深入地解析了Android系统的各种API。这个合集由Android中文翻译组精心编译,旨在为国内开发者提供更易于理解的API文档,使得在...
12. **多媒体支持**:Android提供了丰富的API来处理音频、视频和图像,如MediaPlayer、ExoPlayer、Camera API等。 13. **传感器应用**:Android系统提供了对各种传感器的访问接口,如加速度计、陀螺仪、GPS等,用于...
通过这个中文合集,开发者可以更轻松地掌握如何利用Android API实现这些功能,例如,如何使用Canvas和Paint类进行自定义绘图,如何使用MediaPlayer和SurfaceView来播放视频和音频,如何使用LocationManager获取GPS...
16. **多媒体支持**:Android API提供了对音频、视频和图像的支持,包括MediaPlayer、ExoPlayer、Camera和Bitmap等类。 17. **网络编程**:Android提供了HttpURLConnection、OkHttp、Volley、Retrofit等库进行网络...
"Android开发者指南-中文API"是一个非常有价值的资源,它提供了中文版的Android API文档,帮助开发者更好地理解和使用Android系统提供的各种功能和服务。这个文档通常会涵盖以下几个核心方面: 1. **Android体系...
7. **多媒体支持**:Android API提供了对音频、视频和图像处理的支持,如MediaPlayer、ExoPlayer、Camera和MediaRecorder等。 8. **通知和推送**:Notification(通知)是与用户交互的重要方式,而Firebase Cloud ...
5. **多媒体**:处理音频、视频和图片,如MediaPlayer、Camera API和ExoPlayer库。 6. **通知与消息推送**:使用NotificationManager发送系统通知,以及实现远程消息推送服务,如Firebase Cloud Messaging(FCM)。...
5. **多媒体**:Android API包含了处理图像、音频和视频的功能,例如Camera API用于拍照和录像,MediaPlayer用于播放多媒体文件,以及音频和视频的编码解码库。 6. **传感器与位置服务**:Android设备上的传感器如...
3. **多媒体支持**:Android API包含了对音频、视频和图像的处理功能,例如MediaPlayer类用于播放音频和视频,Camera API用于访问和控制设备摄像头,Bitmap类则用于处理图像。 4. **网络通信**:Android提供了...