一、音乐播放器管理类与音乐Bean
1、MusicPlayerManager.java
import android.media.MediaPlayer;import com.qukan.qklive.ui.live.bean.MusicItem;import java.io.IOException;
import java.util.List;
import java.util.Random;/*** 音乐播放器管理类*/
public class MusicPlayerManager {private MediaPlayer mediaPlayer; // 媒体播放器private List<MusicItem> musicList; // 音乐列表private int currentIndex = 0; // 当前播放索引private int playMode = 1; // 0=列表 1=单曲循环 2=随机public MusicPlayerManager(List<MusicItem> musicList) {this.musicList = musicList;mediaPlayer = new MediaPlayer();}/*** 播放指定索引的音乐* @param index*/public void play(int index) {if (index < 0 || index >= musicList.size()) return;currentIndex = index;MusicItem music = musicList.get(index);try {mediaPlayer.reset();mediaPlayer.setDataSource(music.getPath());mediaPlayer.prepare();mediaPlayer.start();} catch (IOException e) {e.printStackTrace();}}/*** 暂停播放*/public void pause() {if (mediaPlayer.isPlaying()) {mediaPlayer.pause();}}/*** 继续播放*/public void resume() {if (!mediaPlayer.isPlaying()) {mediaPlayer.start();}}/*** 下一首*/public void next() {if (playMode == 2) { // 随机播放currentIndex = new Random().nextInt(musicList.size());} else {currentIndex = (currentIndex + 1) % musicList.size();}play(currentIndex);}/*** 上一首*/public void previous() {currentIndex = (currentIndex - 1 + musicList.size()) % musicList.size();play(currentIndex);}/*** 设置播放模式* @param mode*/public void setPlayMode(int mode) {playMode = mode;if (mode == 1) {mediaPlayer.setLooping(true);} else {mediaPlayer.setLooping(false);}}/*** 设置音量* @param volume*/public void setVolume(float volume) {if (mediaPlayer != null) {mediaPlayer.setVolume(volume, volume);}}public boolean isPlaying() {return mediaPlayer.isPlaying();}public void release() {if (mediaPlayer != null) {mediaPlayer.release();mediaPlayer = null;}}public int getCurrentIndex() {return currentIndex;}public MediaPlayer getMediaPlayer() {return mediaPlayer;}public void setMediaPlayer(MediaPlayer mediaPlayer) {this.mediaPlayer = mediaPlayer;}public int getPlayMode() {return playMode;}}
2、MusicItem.java
/*** 音乐实体类*/
public class MusicItem {//音乐名称public String name;//路径public String path = "";//时长public String duration = "";//默认不播放public boolean isPlaying = false;public MusicItem() {}public MusicItem(String name, String path, String duration) {this.name = name;this.path = path;this.duration = duration;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getDuration() {return duration;}public void setDuration(String duration) {this.duration = duration;}public boolean isPlaying() {return isPlaying;}public void setPlaying(boolean playing) {isPlaying = playing;}
}
二、使用方法
private MusicPlayerManager playerManager;
private List<MusicItem> musicItems;
...
playerManager = new MusicPlayerManager(musicItems);
/*** 播放指定位置的音乐*/private void playAtPosition(int position) {// 记录旧的和新的索引,用于刷新 UIint oldIndex = currentPlayingIndex;currentPlayingIndex = position;// 通知播放器播放playerManager.play(position);// 刷新旧位置和新位置的 UIif (oldIndex != -1) {notifyItemChanged(oldIndex);}notifyItemChanged(currentPlayingIndex);}/*** 暂停播放*/public void pause() {if (playerManager.isPlaying()) {playerManager.pause();notifyItemChanged(currentPlayingIndex);}}/*** 恢复播放*/public void resume() {if (!playerManager.isPlaying() && currentPlayingIndex != -1) {playerManager.resume();notifyItemChanged(currentPlayingIndex);}}/*** 播放下一首*/public void next() {int oldIndex = currentPlayingIndex;playerManager.next();currentPlayingIndex = playerManager.getCurrentIndex();notifyItemChanged(oldIndex);notifyItemChanged(currentPlayingIndex);}/*** 播放上一首*/public void previous() {int oldIndex = currentPlayingIndex;playerManager.previous();currentPlayingIndex = playerManager.getCurrentIndex();notifyItemChanged(oldIndex);notifyItemChanged(currentPlayingIndex);}/*** 获取当前播放索引*/public int getCurrentPlayingIndex() {return currentPlayingIndex;}/*** 获取播放器实例(便于外部控制)*/public MusicPlayerManager getPlayerManager() {return playerManager;}/*** 清理资源:在 Fragment onDestroy 或 Activity onPause 时调用*/public void release() {if (playerManager != null) {playerManager.pause();playerManager.release(); // 注意:你需要在 MusicPlayerManager 中实现 release()}}