首页 > 解决方案 > android studio-依次播放音频文件

问题描述

当按下播放按钮时,我想用 android MediaPlayer 一个一个(依次)播放 mp3 文件。当我运行我的代码时,音频文件同时运行而不是顺序运行。我想解决方案应该在 onCompletion 函数中-仅在最后一个完成后才启动新的 mp3file,但我尝试了几种方法,但没有成功。这是我的代码:

package com.example.PlayerApp;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    MediaPlayer player;
    static List<Integer> audio_id_list = new ArrayList<Integer>();;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        audio_id_list.add(R.raw.audio1);
        audio_id_list.add(R.raw.audio2);
    }
    public void play(View v) {
        for (int i = 0; i < audio_id_list.size(); i++) {
            player = MediaPlayer.create(this, audio_id_list.get(i));
            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    stopPlayer();
                }
            });
            player.start();
        }
    }
    public void pause(View v) {
        if (player != null) {
            player.pause();
        }
    }
    public void stop(View v) {
        stopPlayer();
    }
    private void stopPlayer() {
        if (player != null) {
            player.release();
            player = null;
            Toast.makeText(this, "MediaPlayer released", Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    protected void onStop() {
        super.onStop();
        stopPlayer();
    }
}

''

标签: androidandroid-studioaudiomedia-playersequential

解决方案


尝试这个

int i = 0;

public void play(View v) {
     
     player = MediaPlayer.create(this, audio_id_list.get(i));
     player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
          @Override
          public void onCompletion(MediaPlayer mp) {
             stopPlayer();
             if(i < audio_id_list.size()) {
                i++;
                play(v);
             }
          }
     });
     player.start();
}

推荐阅读