📜  Android中的MediaPlayer类(1)

📅  最后修改于: 2023-12-03 14:39:11.393000             🧑  作者: Mango

Android中的MediaPlayer类

MediaPlayer是Android系统提供的用于播放多媒体文件的类,支持播放的媒体格式包括常见的mp3、mp4、3gp等音视频格式。

MediaPlayer的使用方法

MediaPlayer的使用分为以下几步:

  1. 创建MediaPlayer对象

    MediaPlayer mediaPlayer = new MediaPlayer();
    
  2. 设置要播放的资源

    mediaPlayer.setDataSource(context, uri);
    

    需要注意的是,setDataSource方法有多个重载版本,可以根据需要选择不同的参数类型。

  3. 准备播放器

    mediaPlayer.prepare();
    

    如果要播放网络资源,也可以使用异步方式进行准备操作:

    mediaPlayer.prepareAsync();
    

    并设置setOnPreparedListener监听器,当异步准备完成时会回调该监听器的onPrepared方法。

  4. 开始播放

    mediaPlayer.start();
    
  5. 监听播放完成事件

    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的生命周期可以分为以下几个阶段:

  1. 初始状态:创建MediaPlayer对象后,它会处于初始状态,此时MediaPlayer还没有和任何资源相关联。

  2. 准备状态:当调用prepare()方法时,MediaPlayer会进入准备状态,即开始准备要播放的资源。如果是异步准备资源,MediaPlayer会在后台线程中进行准备操作,此时MediaPlayer并不会立即进入准备状态。

  3. 已准备状态:当MediaPlayer完成了资源的准备操作后,就会进入已准备状态。此时MediaPlayer可以开始播放音视频。

  4. 播放状态:当调用start()方法时,MediaPlayer就会进入播放状态,开始播放音视频。如果调用了pause()方法,MediaPlayer会进入暂停状态,暂停播放音视频。如果调用了stop()方法,MediaPlayer会进入停止状态,此时已经无法继续播放音视频。

  5. 播放完成状态:当MediaPlayer播放完成后,会进入播放完成状态。此时可以通过监听器来处理播放完成事件,并进行相应的处理。

  6. 销毁状态:当MediaPlayer不再使用时,需要调用release()方法来释放MediaPlayer对象及相关资源,此时MediaPlayer会进入销毁状态,状态结束。如果需要重新使用MediaPlayer,请重新创建MediaPlayer对象,而不是在已经销毁的MediaPlayer对象上操作。

MediaPlayer的注意事项
  • MediaPlayer需要占用大量的系统资源,因此在使用时需要注意资源的释放,以免导致内存泄漏或程序异常崩溃。

  • 在使用MediaPlayer的过程中,可能会出现一些异常或错误,比如资源无法播放、播放过程中被其他应用中断、播放完成后没有释放资源等,这些异常需要进行合理的捕获和处理,以确保程序的健壮性。

  • MediaPlayer有一些系统限制,比如同一时间只能播放一个音频资源、播放发生在后台时会受到系统限制等,需要了解这些限制并妥善处理。

  • MediaPlayer在播放音视频时可能会造成卡顿现象,需要使用异步方式进行准备并缓存媒体数据,以提高播放的流畅度。

参考资料
  • Android官方文档:https://developer.android.com/reference/android/media/MediaPlayer

  • 《第一行代码》

  • 《Android高级编程》

  • 等等