Android 开发实战 - 音乐播放器

本文详细介绍了如何开发一个Android音乐播放器,包括播放列表的创建、音乐播放控制、进度条设置、播放模式选择,以及使用MVP模式和观察者模式进行架构设计。在播放器中,涉及了多媒体信息检索、权限管理、多线程操作,并通过建造者模式制作播放控制栏。

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

播放器 1.0

播放列表

基本 Music 类
public class Music {
   
	// id、曲名、创作者、专辑名、封面、存放路径、时间
    private int musicId;
    private String musicName;
    private String musicWriter;
    private String musicAlbum;
    private int musicImageId;
    private String musicPath;
    private int musicDuring;
    // 格式、音质、评论

    public Music(int musicId, String musicName, String musicWriter, String musicAlbum, int musicImageId, String musicPath , int musicDuring) {
   
        this.musicId = musicId;
        this.musicAlbum = musicAlbum;
        this.musicDuring = musicDuring;
        this.musicImageId = musicImageId;
        this.musicName = musicName;
        this.musicPath = musicPath;
        this.musicWriter = musicWriter;
    }

    public int getMusicId() {
   
        return musicId;
    }

    public String getMusicAlbum() {
   
        return musicAlbum;
    }

    public int getMusicDuring() {
   
        return musicDuring;
    }

    public int getMusicImageId() {
   
        return musicImageId;
    }

    public String getMusicName() {
   
        return musicName;
    }

    public String getMusicPath() {
   
        return musicPath;
    }

    public String getMusicWriter() {
   
        return musicWriter;
    }
}
读取 MP3 音频文件

添加权限
获取储存文件需要读取手机文件权限:
Android 包含以下访问外部存储中的文件的权限:

READ_EXTERNAL_STORAGE:允许应用访问外部存储设备中的文件。
WRITE_EXTERNAL_STORAGE:允许应用在外部存储设备中写入和修改文件。拥有此权限的应用也会自动获得 READ_EXTERNAL_STORAGE 权限。

在 AndroidManifest.xml 中添加 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

这里获取手机网易音乐下载文件夹里的文件,并没有做文件类别判定等特殊处理。
通过文件名生成 Music 对象,添进 MusicList 中

@Override
public void findAllLocalMusic() {
   
    // 使用线程做 IO 操作
    // 使用进度
    new Thread(new Runnable() {
   
        @Override
        public void run() {
   
            int musicId = 0;
            mMusicList = new ArrayList<>();
            File path = new File(Environment.getExternalStorageDirectory() + "/netease/cloudmusic/Music");
            File[] files = path.listFiles();
            if (files != null) {
   
                for (File file: files) {
   
                    musicId++;
                    String fileName = file.getName();
                    String musicWriter = fileName.substring(0, fileName.indexOf(" - "));
                    String musicName = fileName.substring(fileName.indexOf(" - ") + 3, fileName.lastIndexOf("."));
                    String musicAlbum = "";
                    int musicImageId = 0;
                    int musicDuring = 0;
                    String musicPath = "";
                    try {
   
                        musicPath = file.getCanonicalPath();
                        Music music = new Music(musicId, musicName, musicWriter, musicAlbum, musicImageId, musicPath, musicDuring);
                        mMusicList.add(music);
                    } catch (IOException e) {
   
						e.printStackTrace();
                    }
                }
            }
            MyComunicationUtil.sendMessage(MediaPlayerPresenter.getInstance(), 1);	// 列表生成,通知主线程
        }
    }).start();
}

一种媒体信息检索方式:

MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();//多媒体信息检索器

mediaMetadataRetriever.setDataSource(path);
String name= mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String author = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
String duration = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); // 播放时长单位为毫秒

mediaMetadataRetriever.release();

音乐播放器

Android带播放进度条的音乐播放器
用MediaPlayer做个带进度条可后台的音乐播放器

  • 音频初始化
  • 界面初始化(曲名、封面、拖动条长度、时间)
  • 控制状态跳转(播放-暂停、换曲……)
多线程执行音频 & 界面初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值