1.播放界面截图:
播放列表:
2.关键代码:
获取音乐列表(通过多媒体数据库中存储的的信息)(首先定义了一个Music类用于存储音乐文件的各种信息):
public List<Music> getmusics( Context context){
List<Music> musiclist=new ArrayList<Music>();//定义一个music类型的列表
//定义一个游标,用来遍历音乐文件
Cursor cursor=context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
if(cursor.moveToFirst()){
while(!cursor.isAfterLast()){
Music music=new Music();
int music_id=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));//音乐的ID
int album_id=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));//专辑的ID
String album=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));//专辑名称
String title=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));//歌曲名称
String artist=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));//歌手
double time=cursor.getDouble(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION))/60000;
//音乐的播放时长,由于单位是毫秒所以除了60000,但暂时还没有以分:秒 形式显示出来
String url=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));//音乐文件的路径
String title_artist=title+"--"+artist;
int isMusic=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.IS_MUSIC));
if(isMusic!=0){
music.setMusic_id(music_id);
music.setAlbum_id(album_id);
music.setAlbum(album);
music.setTitle(title);
music.setArtist(artist);
music.setTime(time);
music.setUrl(url);
music.setTitle_artist(title_artist);
musiclist.add(music);
}
cursor.moveToNext();
}
}
return musiclist;
}
//设置数据适配器
SimpleAdapter adapter=new SimpleAdapter(getApplicationContext(),musiclist,R.layout.music_list,new String[]{"title_artist","album"},new int[]{R.id.title_artist,R.id.album});
lv.setAdapter(adapter);//绑定数据适配器
//为lv这个list设置监听器,并重写onItemClick方法,点击Item可以播放音乐
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
play(mp3list.get(i).getUrl(),mediaplay);//mp3list.get(i).getURl(),是你点击的Item对应音乐的文件路径,play是自己定义的一个播放音乐的方法
}
});
播放,暂停,上一首,下一首
ImageButton.OnClickListener listener = new ImageButton.OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_last:
//上一首
if (current_music > 0) {
current_music = current_music - 1;
mediaplay.reset();
play(mp3list.get(current_music).getUrl(), mediaplay);
isrelease = false;
start.setImageDrawable(getResources().getDrawable(R.drawable.paste));
if(mp3list.size()!=0){
music_name.setText(mp3list.get(current_music).getTitle());
artist_name.setText("-- "+mp3list.get(current_music).getArtist()+" --");
total_time.setText(mp3list.get(current_music).getFormatTime());
progressbar.setMax(mp3list.get(current_music).getTime());
}
}else{
current_music = mp3list.size()-1;
mediaplay.reset();
play(mp3list.get(current_music).getUrl(), mediaplay);
isrelease = false;
start.setImageDrawable(getResources().getDrawable(R.drawable.paste));
if(mp3list.size()!=0){
music_name.setText(mp3list.get(current_music).getTitle());
artist_name.setText("-- "+mp3list.get(current_music).getArtist()+" --");
total_time.setText(mp3list.get(current_music).getFormatTime());
progressbar.setMax(mp3list.get(current_music).getTime());
}
}
break;
//播放,暂停
case R.id.bt_start:
if(isrelease){
mediaplay.reset();
play(mp3list.get(current_music).getUrl(), mediaplay);
isrelease=false;
}
if(!mediaplay.isPlaying()){
mediaplay.start();
((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.paste));
}else {
mediaplay.pause();
((ImageButton) v).setImageDrawable(getResources().getDrawable(R.drawable.start));
}
break;
//下一首
case R.id.bt_next:
if (current_music < mp3list.size()-1) {
current_music = current_music + 1;
mediaplay.reset();
play(mp3list.get(current_music).getUrl(), mediaplay);
start.setImageDrawable(getResources().getDrawable(R.drawable.paste));
isrelease=false;
if(mp3list.size()!=0){
music_name.setText(mp3list.get(current_music).getTitle());
artist_name.setText("-- "+mp3list.get(current_music).getArtist()+" --");
total_time.setText(mp3list.get(current_music).getFormatTime());
progressbar.setMax(mp3list.get(current_music).getTime());
}
}else{
current_music = 0;
mediaplay.reset();
play(mp3list.get(current_music).getUrl(), mediaplay);
start.setImageDrawable(getResources().getDrawable(R.drawable.paste));
isrelease=false;
if(mp3list.size()!=0){
music_name.setText(mp3list.get(current_music).getTitle());
artist_name.setText("-- "+mp3list.get(current_music).getArtist()+" --");
total_time.setText(mp3list.get(current_music).getFormatTime());
progressbar.setMax(mp3list.get(current_music).getTime());
}
}
break;
3.代码链接:https://git.coding.net/ck__/Android_finalwork.git
4.APK地址(文件后缀apk):https://git.coding.net/ck__/Android_finalwork.git
5.程序录屏链接:https://www.bilibili.com/video/av39817213/