Android MediaPlayer是一个用于播放音频和视频文件的类。它提供了许多功能,如播放、暂停、停止和获取播放进度。在这篇文章中,我将向您介绍如何使用Android MediaPlayer类来实现一个简单的播放进度条。

在开始之前,我们首先需要导入MediaPlayer类的库。在Android Studio中,您可以通过在build.gradle文件的dependencies部分添加以下行来实现:

implementation 'androidx.media:media:1.2.0'

接下来,我们需要定义一个MediaPlayer对象并设置音频文件的路径。假设我们有一个名为"audio.mp3"的音频文件,可以将其放置在res/raw文件夹中。以下是设置MediaPlayer对象和音频文件路径的示例代码:

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.audio);

现在,我们可以使用MediaPlayer对象来控制音频的播放和暂停。下面是一个简单的示例代码,通过点击按钮来控制音频的播放和暂停:

Button playButton = findViewById(R.id.play_button);
Button pauseButton = findViewById(R.id.pause_button);

playButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (!mediaPlayer.isPlaying()) {
            mediaPlayer.start();
        }
    }
});

pauseButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mediaPlayer.isPlaying()) {
            mediaPlayer.pause();
        }
    }
});

在上面的代码中,我们使用了两个按钮来控制音频的播放和暂停。当点击播放按钮时,我们首先检查MediaPlayer对象的状态,如果它没有正在播放,则调用start()方法开始播放音频。当点击暂停按钮时,我们检查MediaPlayer对象的状态,如果它正在播放,则调用pause()方法暂停音频的播放。

接下来,我们将添加一个SeekBar进度条来显示音频的播放进度。SeekBar是一个可以拖动的滑动条,可以用于显示和调整进度。以下是一个包含SeekBar的示例布局文件:

<SeekBar
    android:id="@+id/progress_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:max="100" />

在代码中,我们需要在SeekBar的onCreate()方法中设置一些监听器来更新进度条的进度。以下是示例代码:

SeekBar progressBar = findViewById(R.id.progress_bar);
progressBar.setMax(mediaPlayer.getDuration());

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        progressBar.setProgress(0);
    }
});

new Thread(new Runnable() {
    @Override
    public void run() {
        while (mediaPlayer != null) {
            try {
                int currentPosition = mediaPlayer.getCurrentPosition();
                progressBar.setProgress(currentPosition);
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}).start();

在上面的代码中,我们首先设置SeekBar的最大值为音频文件的总时长。然后,我们添加了一个OnCompletionListener来在音频播放完成时重置进度条的进度。接下来,我们创建了一个新的线程,循环获取当前播放的位置,并更新进度条的进度。在每次循环中,我们通过调用getCurrentPosition()方法获取当前播放的位置,并使用setProgress()方法更新进度条的进度。由于播放进度的更新需要一定的时间间隔,因此我们在每次循环后使用Thread.sleep()方法暂停一秒钟。

到目前为止,我们已经实现了一个简单的Android MediaPlayer播放进度条。通过上述代码示例,您可以在自己的应用程序中实现一个带有播放和暂停按钮以及显示播放进度的功能。

下面是一个使用mermaid语法表示的甘特图,展示了代码的执行流程:

gantt
    dateFormat  YYYY-MM-DD
    title Android MediaPlayer播放进度条代码示例

    section 导入库
    导入库  :done, a1, 2022-09-01, 1d

    section 设置MediaPlayer对象和音频文件路径
    设置MediaPlayer对象和音频文件路径 :done, a2, 2022-09-02, 1d

    section 控制播放和暂停
    设置按钮点击事件 :done, a3,