Android MediaPlayer 播放实现

Android平台上的MediaPlayer类提供了一种简单而强大的方式来播放音频和视频文件。它可以从本地文件、网络资源或流式媒体中播放音频和视频,并提供了一系列的控制方法和回调来管理和监控播放过程。

MediaPlayer基本用法

要使用MediaPlayer类播放媒体文件,首先需要创建一个MediaPlayer对象并设置数据源。数据源可以是本地文件路径、网络URL或一个输入流。这里我们以本地文件为例:

MediaPlayer mediaPlayer = new MediaPlayer();
try {
    mediaPlayer.setDataSource("/path/to/audio.mp3");
    mediaPlayer.prepare();
    mediaPlayer.start();
} catch (IOException e) {
    e.printStackTrace();
}

上述代码通过setDataSource方法设置了音频文件的路径,并通过prepare方法进行准备工作。prepare方法是一个同步操作,会阻塞当前线程直到准备工作完成。最后,我们调用start方法来开始播放音频。

当播放完成后,MediaPlayer会触发一个完成事件,我们可以使用setOnCompletionListener方法来监听这个事件并执行相应的操作:

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        // 播放完成后的操作
    }
});

此外,MediaPlayer还提供了一系列的控制方法,包括暂停、继续、停止等。例如,要暂停播放,可以使用pause方法:

mediaPlayer.pause();

要继续播放,可以使用start方法:

mediaPlayer.start();

要停止播放并释放资源,可以使用stop方法:

mediaPlayer.stop();
mediaPlayer.release();

播放进度和监听

在某些场景下,我们可能需要监控播放进度或实时更新播放进度。MediaPlayer提供了一个setOnSeekCompleteListener方法来监听播放进度的变化。下面是一个示例:

mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
    @Override
    public void onSeekComplete(MediaPlayer mp) {
        // 播放进度变化后的操作
    }
});

在onSeekComplete方法中,可以执行一些操作,如更新UI、显示播放进度等。需要注意的是,这个方法只有在使用seekTo方法改变播放位置后才会触发。

如果我们需要实时更新播放进度,可以使用一个定时器来定时获取当前播放位置,并根据需要进行相应的操作。下面是一个示例:

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        if (mediaPlayer.isPlaying()) {
            int currentPosition = mediaPlayer.getCurrentPosition();
            // 更新播放进度的操作
        }
    }
}, 0, 1000);

上述代码使用Timer类创建了一个定时任务,每隔1秒获取一次当前播放位置,并执行相应的操作。需要注意的是,getCurrentPosition方法是一个同步操作,可能会阻塞当前线程。

错误处理和状态监听

在使用MediaPlayer播放媒体文件时,可能会发生一些错误,如文件格式不支持、网络连接断开等。MediaPlayer提供了一个setOnErrorListener方法来监听这些错误,并执行相应的操作:

mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        // 发生错误时的操作
        return false;
    }
});

在onError方法中,可以根据错误码(what)和附加信息(extra)执行相应的操作。

此外,MediaPlayer还提供了一些状态监听方法,如setOnPreparedListener、setOnBufferingUpdateListener等。这些方法可以用来监听播放器的准备状态、缓冲进度等。

总结

本文介绍了Android平台上使用MediaPlayer类进行媒体播放的基本用法和相关技巧。我们通过示例代码演示了如何设置数据源、播放音频、监听播放完成事件、监控播放进度以及处理错误等。希望本文对你了解和使用MediaPlayer有所帮助。

参考文献: [Android Developer Documentation: MediaPlayer](