【Android 多媒体开发】 MediaPlayer 状态机 接口 方法 解析
作者 : 韩曙亮
转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38487967
一. MediaPlayer 状态机 介绍
Android MediaPlayer 状态即图例 :
1. Idle (闲置) 状态 和 End (结束) 状态
MediaPlayer 对象声明周期 : 从 Idle 到 End 状态就是 MediaPlayer 整个生命周期;
-- 生命周期开始 : 进入 Idle (闲置) 状态;
-- 生命周期结束 : 进入 End (结束) 状态;
Idle 和 End 状态转换 :
-- 进入 Idle 状态 : MediaPlayer 刚被创建 new MediaPlayer() 或者 调用了 reset() 方法之后, 进入 Idle (闲置) 状态;
-- 进入 End 状态 : 在 Idle 状态调用 release() 方法后, 会进入 End (结束) 状态;
两种进入 Idle 状态方法的差别 : 在 Idle 状态无法调用 getCurrentPosition(), getDuration(), getVideoHeight(), getVideoWidth(), setAudioStreamtype(int), setLooping(boolean), setVolume(float, float), pause(), start(), stop(), seekTo(), prepare(), prepareAsync() 方法都是错误的;
-- new MediaPlayer() 进入 Idle 状态 : 此时 MediaPlayer 内部引擎 和 状态都没有改变, 调用上面的方法之后, 将无法调用 OnErrorListener.onError() 方法;
-- reset() 进入 Idle 状态 : 此时如果调用上面的方法, 内部的引擎就会回调 OnErrorListener.onError() 方法;
创建 和 重载 MediaPlayer 区别 :
-- 创建 MediaPlayer : 通过 new MediaPlayer() 创建的对象处于 Idle (闲置) 状态;
-- 重载 MediaPlayer : 通过 create() 方法创建的 MediaPlayer 对象处于 Prepare (准备) 状态;
End (结束) 状态解析 :
-- release() 方法作用 : 该方法会释放 播放引擎 中与 MediaPlayer 相关的资源;
-- 释放唯一性资源 : 有些资源如 硬件加速组件 单态组件等都是唯一性的资源, 如果不释放掉, 之后的 Mediaplayer 都无法正常运行;
-- 无法进行状态转换 : End 状态代表 MediaPlayer 生命周期结束, 在此状态不能转换成其它状态了;
2. Error (错误) 状态
Error 状态转换 : 当 MediaPlayer 出现一些错误如 格式错误, 分辨率过高等原因, 播放器引擎 就会调用 OnErrorListener.onError()方法;
-- 进入 Error 状态 : 客户端调用 OnErrorListener.onError() 方法, 会进入 Error 状态;
-- 离开 Error 状态 : 如果想要使用进入 Error 状态的 MediaPlayer, 可以使用 reset() 方法进入 Idle 状态;
注册监听 : 编程注册一个 OnErrorListener 监听器, 用于获取 播放器引擎 内部发生的错误;
-- 注册方法 : 调用 MediaPlayer.setOnErrorListener(OnErrorListener) 方法, 注册 OnErrorListener;
关于一些异常抛出 : 在不合法的地方调用方法, 会抛出 IllegalStateException 异常;
3. Initalized (初始化) 状态
Initialized 状态转换 : 在 Idle 状态调用 setDataSource() 方法, MediaPlayer 会迁移到 Initialized 状态;
-- 注意 : 只能是在 Idle 状态调用该方法, 如果在其它状态调用该方法, 会报出 IllegalStateException 异常;
4. Prepared (就绪) 和 Preparing (准备中) 状态
Prepared (就绪) 状态转换 :
-- 从 Initialized 状态迁移 : 在 Initialized 状态调用 prepare() 方法, 如果方法成功返回, MediaPlayer 就会进入 Prepared 状态;
-- 从 Preparing 状态迁移 : 在 Preparing 状态调用 OnPrepareListener.onPrepared() 方法迁移到 Prepared 状态;
Preparing (准备中) 状态 : Initialized 状态调用 prepareAsync() 方法进入 Preparing 状态;
-- 该状态执行的操作 : 在 Preparing 状态时, 播放器引擎会继续完成准备工作, 同步版本返回 或者 异步版本准备工作完成就会调用 OnPrepareListener.onPrepared() 方法进入 Prepared 状态;
抛出异常 : 只有在 Initialized 方法中才能调用 prepare() 和 prepareAsync()方法, 在其它状态调用会报出 IllegalStateException 遗产;
Prepared 状态 MediaPlayer 可进行的操作 : 在这个状态 MediaPlayer 可以进行 音频视频属性 循环属性等操作;
5. Started (开始) 状态
Started 状态迁移 : 在 Prepared 状态调用 start() 方法, MediaPlayer 即迁移到了 Started 状态;
-- 判断 MediaPlayer 是否在 Started 状态 : 在任何状态下调用 isPlaying() 方法, 可以判断 MediaPlayer 是否在 Started 状态;
-- 跟踪缓冲状态 : 在 Started 状态, 调用 OnBufferingUpdateListener.onBufferingUpdate() 方法, 可以获取视频音频流的缓冲状态;
6. Paused (暂停) 状态
Paused (暂停) 状态迁移 : 在 Started 状态调用 pause() 方法, MediaPlayer 会进入 Paused 状态;
-- 状态迁移时间 : Started 状态转换为 Paused 状态需要一定时间, 这个过程是异步的, 过一段时间之后 isPlaying() 状态才会改变;
-- 回到 Started 状态 : 在 Paused 状态调用 start() 方法, 会进入 Started 状态;
7. Stopped (停止) 状态
Stopped 状态迁移 : 在 Prepared, Started, Paused, PlaybackCompleted 状态下 调用 stop() 方法, MediaPlayer 会迁移到 Stopped 状态;
8. 播放位置调整
seekTo() 方法说明 : 该方法异步, 调用后 播放器引擎还需要进行其它操作, 跳转才能完成;
-- 进行的操作 : 播放器引擎会回调 OnSeekComplete.onSeekComplete()方法, 该方法通过 setOnSeekCompleteListener() 方法注册;
-- seekTo() 方法调用状态 : 该方法可以在 Prepared, Paused, PlaybackCompleted 状态进行调用;
-- 获取播放位置 : 调用 getCurrentPosition() 方法, 可以获取当前播放的位置, 可以帮助播放器更新进度条;
9. PlaybackCompleted (播放完毕) 状态
循环模式开启 : 如果之前使用了 setLooping() 开启了循环模式, 播放完毕之后 MediaPlayer 会重新进入 Started 状态;
PlaybackCompleted 状态迁移 : 如果没有设置循环模式, 那么播放完毕之后会调用 OnCompletion.onCompletion() 回调方法, MediaPlayer 会进入 PlaybackCompleted 状态;
-- OnCompletion注册 : 调用 MediaPlayer.setOnCompletionListener() 注册该监听器;
-- 进入 Started 状态方法 : 在 PlaybackCompleted 状态时, 调用 satrt() 方法可以进入 Started 状态;
二. MediaPlayer 接口 和 常量
1. MediaPlayer 接口
(1) 缓冲相关接口
接口介绍 :
-- 接口名称 : MediaPlayer.OnBufferingUpdateListener;
-- 接口作用 : 定义一个回调接口, 该接口的作用是在流媒体缓冲状态发生改变的时候, 标明该状态;
接口方法介绍 :
-- 接口方法 :
public abstract void onBufferingUpdate (MediaPlayer mp, int percent)
-- 方法作用 : 该方法在 MediaPlayer 通过 HTTP 下载缓冲视频流的时候回调, 用以改变视频缓冲状态;
-- 方法参数 : mp 即 MediaPlayer 实体对象; percent 已经缓冲了的 或者 播放了的 媒体流百分比;
(2) 播放完毕相关接口
接口介绍 :
-- 接口名称 : MediaPlayer.OnCompletionListener;
-- 接口作用 : 在接口中定义了 流媒体 播放完毕后回调的方法;
接口方法介绍 :
-- 接口方法 :
public abstract void onCompletion (MediaPlayer mp)-- 方法作用 : 在 媒体流 播放完毕之后回调;
(3) 错误相关接口
接口介绍 :
-- 接口名称 : MediaPlayer.OnErrorListener;
-- 接口作用 : 在该接口中定义回调方法, 在异步操作中出现错误时会回调该方法, 其它情况下出现错误时直接抛出异常;
接口方法介绍 :
-- 接口方法 :
public abstract boolean onError (MediaPlayer mp, int what, int extra)-- 方法作用 : 异步操作中出现错误时回调该方法;
-- 参数介绍 :
--- a. MediaPlayer mp : MediaPlayer 实体类;
--- b. int what : 出现的错误类型, 如
MEDIA_ERROR_UNKONWN(位置错误) 或者
MEDIA_ERROR_SERVER_DIED(服务器错误) ;
--- c. int extra : 针对与具体错误的附加码, 用于定位错误更详细信息, 例如
MEDIA_ERROR_IO(本地文件或网络相关错误),
MEDIA_ERROR_MALFORMAD (比特流不符合相关的编码标准和文件规范),
MEDIA_ERROR_UNSUPPORTED(框架不支持该功能),
MEDIA_ERROR_TIME_OUT(一些操作超时);
-- 方法执行结果 : 成功处理错误返回 true, 处理失败返回 false, 如果没有设定针对该方法的监听器, 直接调用 OnCompletionListener 监听器;
(4) 信息相关接口
接口介绍 :
-- 接口名称 : MediaPlayer.OnInfoListener;
-- 接口作用 : 该接口定义了一个回调方法, 该方法在媒体播放时出现信息或者警告时回调该方法;
接口方法介绍 :
-- 接口方法 :
public abstract boolean onInfo (MediaPlayer mp, int what, int extra)
-- 方法作用 : 出现了信息或者警告的时候回调;
-- 参数介绍 :
--- a. MediaPlayer mp : MediaPlayer 实体对象;
--- b. int what : 信息或者警告的类型, 如
MEDIA_INFO_UNKNOWN(未知的信息),
MEDIA_INFO_VEDIO_TRACK_LAGGING(视频过于复杂解码太慢),
MEDIA_INFO_VEDIO_RENDERING_START(开始渲染第一帧),
MEDIA_INFO_BUFFRING_START(暂停播放开始缓冲更多数据),
MEDIA_INFO_BUFFERING_END(缓冲了足够的数据重新开始播放),
MEDIA_INFO_BAD_INTERLEAVING(错误交叉),
MEDIA_INFO_NOT_SEEKABLE(媒体不能够搜索),
MEDIA_INFO_METADATA_UPDATE(一组新的元数据用),
MEDIA_INFO_UNSUPPORTED_SUBTITLE(不支持字幕),
MEDIA_INFO_SUBTITLE_TIMED_OUT(读取字幕使用时间过长);
--- c. int extra : 信息或者警告的类型,
-- 返回值 : 如果处理了信息就会返回 true, 没有处理返回false, 如果没有注册该监听, 就会忽略该信息;
(5) 准备播放相关接口
接口介绍 :
-- 接口名称 : MediaPlayer.OnPreparedListener;
-- 接口作用 : 该接口中定义一个回调方法, 该方法在进入 Prepared 状态 并 开始播放的时候回调;
接口方法介绍 :
-- 接口方法 :
public abstract void onPrepared (MediaPlayer mp)
-- 方法作用 : 该方法在进入 Prepared 状态 并 开始播放的时候回调;
-- 参数介绍 : MediaPlayer mp , MediaPlayer 实体对象;
(6) 查找操作相关接口
接口介绍 :
-- 接口名称 : MediaPlayer.OnSeekCompleteListener;
-- 接口作用 : 该接口定义了一个回调方法, 该方法在查找操作完成后回调;
接口方法介绍 :
-- 接口方法 :
public abstract void onSeekComplete (MediaPlayer mp)
-- 方法作用 : 查找操作完成的时候回调该方法;
(7) 视频大小相关接口
接口介绍 :
-- 接口名称 : MediaPlayer.OnVideSizeChangedListener;
-- 接口作用 : 该接口中定义了一个回调方法, 当视频大小首次被知晓或者更新的时候回调该方法;
接口方法介绍 :
-- 接口方法 :
public abstract void onVideoSizeChanged (MediaPlayer mp, int width, int height)
-- 方法作用 : 视频大小更新时回调该方法, 如果没有视频返回0;
-- 参数解析 : int width 视频的宽度, int height 视频的高度;
三. MediaPlayer 常用方法解析
1. MediaPlayer 构造方法
方法的注意点 : 使用 create() 方法创建的 MediaPlayer, 直接指定了 媒体资源, 不需要再进行 调用 prepare() 方法;
(1) 默认构造方法
方法名称 :public MediaPlayer ();
public MediaPlayer ()
方法简介 : 默认构造方法, 创建的 MediaPlayer 自动进入 Idle 状态, 不同于 create() 方法, 创建的 MediaPlayer 自动进入 Prepared 状态;
-- 两种方法比较 : 因为 create() 方法创建的时候就指定了数据源, 不用在 Idle 状态设置数据, 并调用 prepare() 方法了;
(2) 指定uri的构造方法
方法名称 :public static MediaPlayer create (Context context, Uri uri);
public static MediaPlayer create (Context context, Uri uri)
方法简介 : 根据给定的 Uri 创建一个 MediaPlayer 对象, 如果创建成功, 其内部会自动调用 prepare() 方法, 不同再自己调用一次, MediaPlayer 使用完毕之后要使用 release()方法, 否则会出错;
返回值 : 如果创建成功返回 MediaPlayer 对象, 如果创建失败返回 null;
参数介绍 :
-- Context context : Android 的上下文对象;
-- Uri uri : 数据源的 Uri;
(3) 指定资源 id
方法名称 :public static MediaPlayer create (Context context, int resid);
public static MediaPlayer create (Context context, int resid)
方法简介 : 通过给定的 raw 资源 id, 创建 MediaPlayer 对象;
参数介绍 : int resid 设置播放源文件, 这里指的是 raw 资源 id;
(4) 指定 id 和 SurfaceView
方法名称 :public static MediaPlayer create (Context context, Uri uri, SurfaceHolder holder);
public static MediaPlayer create (Context context, Uri uri, SurfaceHolder holder)
方法简介 : 创建一个 MediaPlayer, 指定 MediaPlayer 数据源 Uri 和 SurfaceView 对象;
参数介绍 :
-- Context context : Android 的上下文对象;
-- Uri uri : 指定的网络媒体的数据源;
-- SurfaceHolder holder : 指定要播放视频的 SurfaceHolder ;
2. 获取播放器相关属性方法
(1) 获取当前位置
方法名称 :public int getCurrentPosition ();
方法解析 : 获取当前播放器播放的位置, 返回值是 已经播放了的毫秒数;
方法的有效状态和无效状态 :
-- 有效状态 : Idle, Initialized,Prepared, Started, Paused, Stopped, PlaybackCompleted, 在以上状态调用该方法不会改变 MediaPlayer 状态;
-- 无效状态:Error 状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(2) 获取文件时长
方法名称 :public int getDuration ();
方法解析 : 获取文件的播放时长 (毫秒), 如果没有可用的时长, 就会返回 -1;
方法的有效状态和无效状态: 设置数据源之后的非错误状态才可以获取播放文件时长;
--有效状态:Prepared,Started,Paused,Stopped,PlaybackCompleted, 在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态: Idle, Initialized,Error状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(3) 获取视频高度 宽度
方法名称 :public int getVideoHeight (), public int getVideoWidth ();
方法解析 : 返回视频的高度 或者 宽度, 如果没有资源, 那么会返回0, 当视频大小改变的时候可以使用 MediaPlayer.OnVideoSizeChangedListener 监听其监听该事件;
方法的有效状态和无效状态: 除 Error 以外的所有状态;
--有效状态:Idle,Initialized,Prepared,Started,Paused,Stopped,PlaybackCompleted, 在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态:Error状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(4) 检查 MediaPlayer 是否在循环
方法名称 :public boolean isLooping ();
方法解析 : 检查 MediaPlayer 是否在循环播放, 如果是 返回 true, 不是的话 返回 false;
方法的有效状态和无效状态: 在任何状态都有效, 包括在 Error 状态的时候;
(5) 检查 MediaPlayer 是否在播放
方法名称 :public boolean isPlaying ();
方法解析 : 检查 MediaPlayer 是否正在播放;
方法的有效状态和无效状态: 除 Error 以外的所有状态, 都可以查看 MediaPlayer 是否在播放;
--有效状态:Idle,Initialized,Prepared,Started,Paused,Stopped,PlaybackCompleted, 在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态:Error状态, 在 Error 状态调用该方法, 会进入 Error 状态, 抛出 IllegalStateException;
3. 状态迁移相关方法
(1) 暂停播放
方法名称 :public void pause ();
方法解析 : 暂停播放, 如果想要恢复播放的话, 调用 start() 方法;
方法的有效状态和无效状态: 只有在 Started 和 Paused 状态有效, Started 状态调用该方法进入 Paused 状态, Paused 状态调用该方法不起作用;
--有效状态:Started,Paused,在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态:Error, Idle,Initialized,Prepared,Stopped,PlaybackCompleted状态, 在 Error 状态调用该方法, 会进入 Error 状态, 抛出 IllegalStateException;
(2) 同步准备播放
方法名称 :public void prepare ();
方法解析 : 这是个同步方法, 设置完数据源 和 播放载体之后调用该方法 或者 prepareAsync() 方法, 才能进行正常播放, 如果方法调用成功, 才能正常播放;
方法的有效状态和无效状态: 只有在 Initialized 和 Stopped 状态中会
--有效状态:Initialized,Stopped,在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态: Idle,Prepared,Started,Paused,PlaybackCompleted,Error状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(3) 异步准备播放
方法名称 :public void prepareAsync ();
方法作用 : 异步的方法, 让播放器处于准备状态;
-- 调用时机 : 设置完数据源 和 播放载体 之后调用该方法;
-- 适用情况 : 对于 流媒体 来说, 调用该方法立即返回, 要比 阻塞等待缓冲足够的数据在播放比较好;
方法的有效状态和无效状态: 只有在 Initialized 和 Stopped 状态中会
--有效状态:Initialized,Stopped,在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态:Idle,Prepared,Started,Paused,PlaybackCompleted,Error状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(4) 释放 MediaPlayer
方法名称 :public void release ();
方法解析 : 释放掉与 MediaPlayer 相关的资源;
-- 调用时机 : 在 MediaPlayer 播放的 Activity 暂停(pause) 停止(stop) 或者 销毁(destroy) 的时候要调用该方法释放 资源;
方法的有效状态和无效状态: 在任何状态下 调用 release() 方法都可以;
(5) 重置 MediaPlayer
方法名称 :public void reset ();
方法解析 : 重置 MediaPlayer 到 Idle 状态, 此时还没有设置数据源, 如果想要播放媒体资源, 需要设置数据源 和 调用 prepare()方法;
方法的有效状态和无效状态: 在任何状态下 调用 release() 方法都可以;
4. 设置数据源相关方法
(1) 设置本地文件路径
方法名称 :public void setDataSource (String path);
方法解析 : 设置一个 文件路径 或者 http/rtsp 地址 当做数据源;
参数解析 : String path, 媒体资源的 文件路径 或者是 http/rtsp url 地址路径;
方法的有效状态和无效状态: 只有在 Idle 状态下才能设置数据源, 其它情况都会报错;
--有效状态:Idle,在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态:Initialized,Prepared,Started,Paused,Stopped,PlaybackCompleted,Error,状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(2) 设置文件描述符
方法名称 :public void setDataSource (FileDescriptor fd);
方法解析 : 设置一个文件描述符资源, 调用者应该注意关闭这个文件描述符;
参数解析 : FileDescriptor sd, UNIX 系统的文件描述, 相当与一个文件;
方法的有效状态和无效状态: 只有在 Idle 状态下才能设置数据源, 其它情况都会报错;
--有效状态:Idle,在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态:Initialized,Prepared,Started,Paused,Stopped,PlaybackCompleted,Error,状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(3) 设置数据源只截取其中一段
方法名称 :public void setDataSource (FileDescriptor fd, long offset, long length);
方法解析 : 设置一个文件描述符数据源, 这个文件描述符文件必须是可查询的;
参数解析 :
-- FileDescriptor fd : 文件描述符;
-- long offset : 文件开始播放的位置, 这里指的是字节数;
-- long length : 文件播放的大小, 字节数;
方法的有效状态和无效状态: 只有在 Idle 状态下才能设置数据源, 其它情况都会报错;
--有效状态:Idle,在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态:Initialized,Prepared,Started,Paused,Stopped,PlaybackCompleted,Error,状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(4) 设置 Uri 路径
方法名称 :public void setDataSource (Context context, Uri uri);
方法介绍 : 设置一个 Uri 路径当作数据源;
参数介绍 :
-- Context context : Android 上下文对象;
-- Uri uri : 网络媒体文件数据源;
方法的有效状态和无效状态: 只有在 Idle 状态下才能设置数据源, 其它情况都会报错;
--有效状态:Idle,在以上状态调用该方法不会改变 MediaPlayer 状态;
--无效状态:Initialized,Prepared,Started,Paused,Stopped,PlaybackCompleted,Error,状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
5. 设置监听器相关方法
注意 : 注册监听器相关方法在 MediaPlayer 的任何状态都可以调用;
(1) 注册缓冲变化相关监听器
方法名称 :public void setOnBufferingUpdateListener (MediaPlayer.OnBufferingUpdateListener listener);
方法作用 : 注册一个在网络缓冲数据流发生变化后回调的监听器;
(2) 注册播放完毕监听器
方法名称 :public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener);
方法作用 : 注册一个在媒体资源播放完毕之后回调的播放事件;
(3) 注册错误监听器
方法名称 :public void setOnErrorListener (MediaPlayer.OnErrorListener listener);
方法解析 : 注册一个在异步操作过程中发生错误回调的监听器;
(4) 注册事件监听器
方法名称 :public void setOnInfoListener (MediaPlayer.OnInfoListener listener);
方法解析 : 注册一个当有信息 或者 警告出现就会回调的监听器;
(5) 注册准备播放监听器
方法名称 :public void setOnPreparedListener (MediaPlayer.OnPreparedListener listener);
方法解析 : 注册一个当媒体资源准备播放时回调的监听器;
(6) 注册搜寻操作监听器
方法名称 :public void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener);
方法解析 : 注册一个搜寻操作完成后回调的监听器;
(7) 注册视频大小改变监听器
方法名称 :public void setOnVideoSizeChangedListener (MediaPlayer.OnVideoSizeChangedListener listener);
方法解析 : 注册一个 当视频大小已知 或者 更新后 回调的监听器;
6. MediaPlayer 其它设置
(1) 指定音频流类型
方法名称 :public void setAudioStreamType (int streamtype);
方法解析 : 为 MediaPlayer 设置音频流类型, 音频类型在 AudioManager 中定义, 该方法必须在 prepare() 或者 prepareAsync() 方法之前调用;
方法的有效状态和无效状态:
--有效状态:Idle,Initialized,Prepared,Started,Paused,Stopped,PlaybackCompleted, 在以上状态调用该方法会进入 Paused 状态;
--无效状态:Error状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(2) 设定播放载体
方法名称 :public void setDisplay (SurfaceHolder sh);
方法解析 : 设定该媒体播放器的载体 SurfaceHolder, 如果要播放视频必须设置该项 或者 setSurface() 中的任意一个, 如果播放音频, 就不许要设置该该项, 如果播放视频没有设置该项, 那么只会播放声音;
方法的有效状态和无效状态: 在任何状态下都有效, 并且不会改变当前的运行状态;
(3) 设置循环播放
方法名称 :public void setLooping (boolean looping);
方法解析 : 设置播放器是否循环播放;
方法的有效状态和无效状态:
--有效状态:Idle,Initialized,Prepared,Started,Paused,Stopped,PlaybackCompleted, 在以上状态调用该方法不会改变当前状态;
--无效状态:Error状态, 在 Error 状态调用该方法, 会进入 Error 状态中;
(4) 设置是否保持屏幕
方法名称 :public void setScreenOnWhilePlaying (boolean screenOn);
方法解析: 设置在视频播放的时候是否使用 SurfaceHolder 保持屏幕亮起;
方法的有效状态和无效状态: 任何状态都可调用, 并且不会改变当前状态;
(5) 设置电源管理状态
方法名称 :public void setWakeMode (Context context, int mode);
方法解析 : 为 MediaPlayer 设置电源管理状态;
方法的有效状态和无效状态: 任何状态都可调用, 并且不会改变当前状态;
作者:韩曙亮
转载请著名出处: http://blog.csdn.net/shulianghan/article/details/38487967
相关推荐
本文将深入探讨Android多媒体开发的高级编程技术,并基于提供的资源——"Android多媒体开发高级编程及源码",来解析相关知识点。 1. **Android多媒体框架** Android系统提供了一个强大的多媒体框架,包括...
### Android多媒体框架详细分析 #### 一、摘要 ...通过以上分析可以看出,Android多媒体框架是一个非常复杂且功能强大的系统,它集成了多媒体处理的各个方面,为开发高质量的多媒体应用提供了坚实的基础。
3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户界面简介 4.1.2 事件处理 4.2 常用控件应用 4.2.1 文本框(Textiew) 4.2.2 列表...
《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 ...
精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会游戏软件分会(CGIA)认证及国际游戏开发教育联合会国际认证。曾经领导和参与...
综上所述,海康摄像头Android App的二次开发涉及了多媒体处理、网络通信、设备兼容性、组件化设计等多个方面,开发者需要具备扎实的Android基础和良好的问题解决能力。通过精心设计和实现,我们可以构建出高效、稳定...
Android提供了MediaPlayer类来播放音频,学习如何控制音频播放、暂停和停止,以及如何处理音频流,是多媒体应用开发的基础。 9. **权限管理**:自Android 6.0起,部分敏感权限需要在运行时动态请求。了解如何在代码...
精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会游戏软件分会(CGIA)认证及国际游戏开发教育联合会国际认证。曾经领导和参与...
#### 七、Android多媒体开发 1. **音视频播放** - 使用MediaPlayer类播放音频或视频文件。 - 支持循环播放、快进/快退等功能。 2. **摄像头与拍照** - 调用Camera API控制摄像头预览、拍照等操作。 - 可以...
总结来说,ijkplayer是一个强大的Android多媒体播放器,它的灵活性和性能使其成为许多开发者的选择。通过理解和熟练使用ijkplayer,开发者能够构建出功能丰富的媒体播放应用,满足各种播放需求。在实际项目中,不断...
此外,`MediaPlayer`还提供控制播放状态的方法,如`pause()`、`stop()`和`seekTo()`,用于暂停、停止和跳转到指定位置。 其次,对于音频录制,Android提供了`AudioRecord`类。开发者可以使用它来捕获设备麦克风的...
Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...
Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...
1. **多媒体播放器基础**:开发一个音乐播放器,首先要熟悉Android的多媒体API,如`MediaPlayer`类,用于处理音频播放。`MediaPlayer`可以播放各种格式的音频文件,并提供了控制播放状态(如播放、暂停、停止、 ...
Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1...
在Android开发领域,掌握各种应用案例的实现是提升技能的关键步骤。这个压缩包"android开发十个案例打包下载"包含了十个常见的Android应用实例,涵盖了多个功能模块,旨在帮助开发者加深对Android平台的理解和实践。...
2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色...
在Android移动开发领域,实践是掌握技术的关键。这个"Android移动开发案例精选集锦源代码"为初学者提供了一系列实际的项目源码,涵盖了多个核心功能模块,有助于深入理解和学习Android应用开发。以下是对每个源码...