音乐播放器一系列功能单例工具类

该代码实现了一个名为MusicUtils的类,用于管理音乐播放。它包含了MediaPlayer对象用于播放音乐,一个列表存储音乐数据,以及管理播放模式(顺序、随机、单曲循环)的方法。此外,还包括播放、暂停、上一首、下一首、快进、快退及获取歌曲信息的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.bw.yindanli.utils;

import android.media.MediaPlayer;
import android.widget.ImageView;

import com.bw.yindanli.Bean.JavaBean;
import com.bw.yindanli.R;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class MusicUtils {
    //音乐播放器
    private MediaPlayer mediaPlayer;

    private List<JavaBean.DataDTO> list=new ArrayList<>();//存放音乐的列表

    private int index=0;//记录当前播放的是列表中的第几首

    private int platMode=0;//设置播放模式,修改index的值  0--顺序播放    1--随机播放  2--单曲循环

    private MusicUtils(){
        mediaPlayer=new MediaPlayer();
    }

    private static  MusicUtils musicUtils=null;

    public static MusicUtils getInstance(){
        if(musicUtils==null){
            musicUtils=new MusicUtils();
        }
        return musicUtils;
    }

    public List<JavaBean.DataDTO> getList() {
        return list;
    }

    public void setList(List<JavaBean.DataDTO> list) {
        this.list = list;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public int getPlatMode() {
        return platMode;
    }

    public void setPlatMode(int platMode) {
        this.platMode = platMode;
    }

    //实现播放音乐
    public void play(int i){//传入点击的是哪首歌
        index=i;//赋值给全局变量index
        mediaPlayer.reset();//处于空闲状态
        try {
            mediaPlayer.setDataSource(list.get(index).getData());//设置资源路径
            mediaPlayer.prepareAsync();//异步准备
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {//设置监听事件
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    mediaPlayer.start();//开始播放
                }
            });
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    //实现暂停播放音乐
    public void playorpause(ImageView imageView){
        boolean playing = mediaPlayer.isPlaying();//当前是否播放
        if(playing){
            mediaPlayer.pause();//暂停播放
            imageView.setImageResource(R.drawable.ic_action_play);
        }else{
            mediaPlayer.start();//开始播放
            imageView.setImageResource(R.drawable.ic_action_pause);
        }
    }

    //实现上一首
    public void pre(){
        if(platMode==0){//顺序播放
            index--;
            if(index<0){//考虑数组越界
                index=list.size()-1;
            }
            play(index);
        }else if(platMode==1){//随机播放
            index=new Random().nextInt(list.size()-1);//生成随机数
            play(index);
        }

    }

    //实现下一首
    public void next(){
        if(platMode==0){//顺序播放
            index++;
            if(index>list.size()-1){//考虑数组越界
                index=0;
            }
            play(index);
        }else if(platMode==1){//随机播放
            index=new Random().nextInt(list.size()-1);//生成随机数
            play(index);
        }
    }

    //快进5秒
    public void kjin(){
        int currentPosition = mediaPlayer.getCurrentPosition();//获取当前播放时长
        currentPosition+=5*1000;//快进5秒
        mediaPlayer.seekTo(currentPosition);//跳转到指定时常的位置
    }

    //快退5秒
    public void ktui(){
        int currentPosition = mediaPlayer.getCurrentPosition();//获取当前播放时长
        currentPosition-=5*1000;//快退5秒
        mediaPlayer.seekTo(currentPosition);//跳转到指定时常的位置
    }

    //返回当前播放音乐的信息
    public String getTiyle(){//歌名
        return list.get(index).getTitle();
    }
    public String getArtist(){//歌手名
        return list.get(index).getArtist();
    }
    public String getAlbum(){//专辑封面
        return list.get(index).getAlbum();
    }
    public String getLec(){//歌词
        return list.get(index).getLrc();
    }
    
    //进度条  系类
    public int getProgress(){//当前进度
        return mediaPlayer.getCurrentPosition();
    }
    public int getDuration(){//总时长总大小
        return mediaPlayer.getDuration();
    }
    public void seekTo(int time){//跳转到指定位置
        mediaPlayer.seekTo(time);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值