📅  最后修改于: 2023-12-03 14:39:11.393000             🧑  作者: Mango
MediaPlayer是Android系统提供的用于播放多媒体文件的类,支持播放的媒体格式包括常见的mp3、mp4、3gp等音视频格式。
MediaPlayer的使用分为以下几步:
创建MediaPlayer对象
MediaPlayer mediaPlayer = new MediaPlayer();
设置要播放的资源
mediaPlayer.setDataSource(context, uri);
需要注意的是,setDataSource
方法有多个重载版本,可以根据需要选择不同的参数类型。
准备播放器
mediaPlayer.prepare();
如果要播放网络资源,也可以使用异步方式进行准备操作:
mediaPlayer.prepareAsync();
并设置setOnPreparedListener
监听器,当异步准备完成时会回调该监听器的onPrepared
方法。
开始播放
mediaPlayer.start();
监听播放完成事件
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播放完成时的处理逻辑
}
});
除了以上基本的使用方法,MediaPlayer还提供了很多其他的控制方法和监听器,比如:
pause()
:暂停播放stop()
:停止播放seekTo(int msec)
:跳转到指定位置setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)
:跳转完成监听器setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
:缓存更新监听器setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
:视频大小变化监听器具体的使用方法可以参考Android官方文档或其他一些比较全面的学习资料。
MediaPlayer是一个非常底层的系统类,它的生命周期管理需要特别谨慎,否则容易导致程序出现各种异常。
MediaPlayer的生命周期可以分为以下几个阶段:
初始状态:创建MediaPlayer对象后,它会处于初始状态,此时MediaPlayer还没有和任何资源相关联。
准备状态:当调用prepare()
方法时,MediaPlayer会进入准备状态,即开始准备要播放的资源。如果是异步准备资源,MediaPlayer会在后台线程中进行准备操作,此时MediaPlayer并不会立即进入准备状态。
已准备状态:当MediaPlayer完成了资源的准备操作后,就会进入已准备状态。此时MediaPlayer可以开始播放音视频。
播放状态:当调用start()
方法时,MediaPlayer就会进入播放状态,开始播放音视频。如果调用了pause()
方法,MediaPlayer会进入暂停状态,暂停播放音视频。如果调用了stop()
方法,MediaPlayer会进入停止状态,此时已经无法继续播放音视频。
播放完成状态:当MediaPlayer播放完成后,会进入播放完成状态。此时可以通过监听器来处理播放完成事件,并进行相应的处理。
销毁状态:当MediaPlayer不再使用时,需要调用release()
方法来释放MediaPlayer对象及相关资源,此时MediaPlayer会进入销毁状态,状态结束。如果需要重新使用MediaPlayer,请重新创建MediaPlayer对象,而不是在已经销毁的MediaPlayer对象上操作。
MediaPlayer需要占用大量的系统资源,因此在使用时需要注意资源的释放,以免导致内存泄漏或程序异常崩溃。
在使用MediaPlayer的过程中,可能会出现一些异常或错误,比如资源无法播放、播放过程中被其他应用中断、播放完成后没有释放资源等,这些异常需要进行合理的捕获和处理,以确保程序的健壮性。
MediaPlayer有一些系统限制,比如同一时间只能播放一个音频资源、播放发生在后台时会受到系统限制等,需要了解这些限制并妥善处理。
MediaPlayer在播放音视频时可能会造成卡顿现象,需要使用异步方式进行准备并缓存媒体数据,以提高播放的流畅度。
Android官方文档:https://developer.android.com/reference/android/media/MediaPlayer
《第一行代码》
《Android高级编程》
等等