博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1600802002
阅读量:7287 次
发布时间:2019-06-30

本文共 6635 字,大约阅读时间需要 22 分钟。

1.播放界面截图:

播放列表:

 

 

2.关键代码:

获取音乐列表(通过多媒体数据库中存储的的信息)(首先定义了一个Music类用于存储音乐文件的各种信息):

public List
getmusics( Context context){
List
musiclist=new ArrayList
();//定义一个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.代码链接:

4.APK地址(文件后缀apk):

5.程序录屏链接:

 

转载于:https://www.cnblogs.com/ck03/p/10105319.html

你可能感兴趣的文章
父传子,关于清楚子组件提交之后页面的数据
查看>>
Java 命令行交互输入库 JLine 入门
查看>>
举个栗子看如何做MySQL 内核深度优化
查看>>
asp.net 虹软 人脸识别 实现刷脸住宿、刷脸签到、刷脸进入等
查看>>
tomcat服务器输入localhost可以访问,ip无法访问解决办法
查看>>
js 实现异步上传图片+预览
查看>>
Java 趣史-差点把 Java 命名成了 Silk(丝绸)
查看>>
死磕 java集合之ConcurrentLinkedQueue源码分析
查看>>
ubuntu安装sun jdk6
查看>>
phalapi-入门篇4(国际化高可用和自动生成文档)
查看>>
xcode报错集锦_1
查看>>
hadoop-mapreduce分析
查看>>
多线程学习(4)wait/notify
查看>>
OSChina 周五乱弹——让人伤心的事
查看>>
Golang配置
查看>>
android下拉刷新
查看>>
linux 中route命令的使用
查看>>
ArrayList既然继承自AbstractList抽象类,而AbstractList已经实现了List接口,那么ArrayList类为何还要再实现List接口呢?...
查看>>
CentOS安装Redis
查看>>
在iOS上实现一个简单的日历控件
查看>>