Android mediaPlayer 监听播放进度

在Android应用程序中,使用MediaPlayer类来播放音频或视频是很常见的需求。对于一些需要展示播放进度的场景,我们可以通过监听MediaPlayer的播放进度来实现。

监听播放进度

MediaPlayer类中提供了一个setOnPreparedListener方法,用于设置当MediaPlayer准备好开始播放时的监听器。我们可以在该监听器中注册一个OnSeekCompleteListener来监听播放进度。

下面是一个简单的示例代码:

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource("
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();
    }
});
mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
    @Override
    public void onSeekComplete(MediaPlayer mp) {
        int currentPosition = mp.getCurrentPosition();
        int totalDuration = mp.getDuration();
        float progress = (float) currentPosition / totalDuration * 100;
        // 更新UI界面,展示播放进度
    }
});
mediaPlayer.prepareAsync();

在上述代码中,我们首先创建一个MediaPlayer实例,并设置要播放的音频文件的数据源。然后,我们设置一个OnPreparedListener,在MediaPlayer准备好开始播放时调用start方法开始播放。接着,我们设置一个OnSeekCompleteListener,在播放进度发生变化时调用onSeekComplete方法来更新播放进度。

onSeekComplete方法中,我们通过调用getCurrentPosition方法获取当前播放位置,调用getDuration方法获取总的播放时长,并计算出播放进度的百分比。然后,我们可以根据具体需求,更新UI界面来展示播放进度。

序列图

下面是一个描述上述代码执行过程的序列图:

sequenceDiagram
    participant App
    participant MediaPlayer
    App->MediaPlayer: setDataSource("
    App->MediaPlayer: setOnPreparedListener(listener)
    App->MediaPlayer: setOnSeekCompleteListener(listener)
    App->MediaPlayer: prepareAsync()
    MediaPlayer->MediaPlayer: prepare
    MediaPlayer-->App: onPrepared
    App->MediaPlayer: start
    MediaPlayer-->App: onSeekComplete
    App-->MediaPlayer: getCurrentPosition
    App-->MediaPlayer: getDuration
    App-->MediaPlayer: update UI

结论

通过监听MediaPlayer的播放进度,我们可以实时获取当前播放位置和总的播放时长,并展示播放进度给用户。这样,我们可以方便地实现一些需要展示播放进度的功能,如进度条的更新、歌词的同步等。

希望本文对你理解Android中如何监听MediaPlayer的播放进度有所帮助!