背景
经常需要播放一段语音,语音播放需要有追加和覆盖2种模式。追加模式,需要把语音资源放入队列里,按顺序地播放。覆盖模式,直接打断当前的状态,播放最新的语音资源。
具体实现:
package com.ycf.audioplaydemo; import android.content.Context; import android.media.MediaPlayer; import android.os.Handler; import android.os.Message; import androidx.annotation.NonNull; import java.util.LinkedList; import java.util.Queue; public class SoundMaker { private Context context = null; private Queue<Integer> soundQueue = null; private MediaPlayer mediaPlayer = null; private OnCompletionListener onCompletionListener = null; public SoundMaker(Context context){ this(context, null); } public SoundMaker(Context context, OnCompletionListener onCompletionListener){ this.context = context; this.onCompletionListener = onCompletionListener; this.soundQueue = new LinkedList<Integer>(); } public enum SoundPlayMode{ SOUND_ADD_MODE, SOUND_OVER_MODE } public void playSound(int resId, SoundPlayMode mode){ if(mode == SoundPlayMode.SOUND_ADD_MODE) { //追加模式 System.out.println("---------------追加模式-----------------"); if (mediaPlayer == null) { Message message = new Message(); message.what = 0; message.obj = resId; handler.sendMessage(message); } else { System.out.println("插入队列---"); soundQueue.offer(resId); } } else if(mode == SoundPlayMode.SOUND_OVER_MODE) { //覆盖模式 System.out.println("---------------覆盖模式-----------------"); if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null;