文章目录
播放器 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();
音乐播放器
- 音频初始化
- 界面初始化(曲名、封面、拖动条长度、时间)
- 控制状态跳转(播放-暂停、换曲……)
多线程执行音频 & 界面初始化