Android应用开发--MP3音乐播放器代码实现(一)

需求1:将内存卡中的MP3音乐读取出来并显示到列表当中

1.   从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象
2.   迭代List集合,把每一个Mp3Info对象的所有属性,保存到Map对象当中
3.   定义一个List集合,把Map对象添加到List集合当中
4.   通过定义一个SimpleAdpter,调用setAdpter方法,将数据显示到列表当中
/**
* 用于从数据库中查询歌曲的信息,保存在List当中
*
* @return
*/
public List<Mp3Info> getMp3Infos() {Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>();for (int i = 0; i < cursor.getCount(); i++) {Mp3Info mp3Info = new Mp3Info();cursor.moveToNext();long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID)); //音乐idString title = cursor.getString((cursor  .getColumnIndex(MediaStore.Audio.Media.TITLE)));//音乐标题String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//艺术家long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//时长long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)); //文件大小String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));               //文件路径int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//是否为音乐if (isMusic != 0) {      //只把音乐添加到集合当中mp3Info.setId(id);mp3Info.setTitle(title);mp3Info.setArtist(artist);mp3Info.setDuration(duration);mp3Info.setSize(size);mp3Info.setUrl(url);mp3Infos.add(mp3Info);}}
return mp3Infos;
}
/*** 填充列表* @param mp3Infos*/public void setListAdpter(List<Mp3Info> mp3Infos) {List<HashMap<String, String>> mp3list = new ArrayList<HashMap<String, String>>();for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {Mp3Info mp3Info = (Mp3Info) iterator.next();HashMap<String, String> map = new HashMap<String, String>();map.put("title", mp3Info.getTitle());map.put("Artist", mp3Info.getArtist());map.put("duration", String.valueOf(mp3Info.getDuration()));map.put("size", String.valueOf(mp3Info.getSize()));map.put("url", mp3Info.getUrl());mp3list.add(map);}mAdapter = new SimpleAdapter(this, mp3list,R.layout.music_list_item_layout, new String[] { "title", "Artist", "duration" },new int[] { R.id.music_title, R.id.music_Artist, R.id.music_duration });mMusiclist.setAdapter(mAdapter); }

实现效果如图:

需求2:点击列表的每一项,启动一个服务来播放音乐

1.   注册条目点击监听器OnItemClickListener

2.   定义一个实现OnItemClickListener接口的内部类

3.   定义一个继承Service的服务类PlayerServie

1.   注册条目点击监听器OnItemClickListener

mMusiclist = (ListView) findViewById(R.id.music_list);mMusiclist.setOnItemClickListener(new MusicListItemClickListener());mp3Infos = getMp3Infos();setListAdpter(getMp3Infos());

2.   定义一个实现OnItemClickListener接口的内部类

private class MusicListItemClickListener implements OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {if(mp3Infos != null) {Mp3Info mp3Info = mp3Infos.get(position);Log.d("mp3Info-->", mp3Info.toString());Intent intent = new Intent();intent.putExtra("url", mp3Info.getUrl());     intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG);intent.setClass(MainActivity.this, PlayerService.class);startService(intent);      //启动服务}}
}

3.   定义一个继承Service的服务类PlayerServie(未完善的Service类)

package com.wwj.sb.service;import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.IBinder;import com.wwj.sb.domain.AppConstant;@SuppressLint("NewApi")
public class PlayerService extends Service {private MediaPlayer mediaPlayer =  new MediaPlayer();      //媒体播放器对象private String path;                       //音乐文件路径private boolean isPause;                    //暂停状态@Overridepublic IBinder onBind(Intent arg0) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {if(mediaPlayer.isPlaying()) {stop();}path = intent.getStringExtra("url");       int msg = intent.getIntExtra("MSG", 0);if(msg == AppConstant.PlayerMsg.PLAY_MSG) {play(0);} else if(msg == AppConstant.PlayerMsg.PAUSE_MSG) {pause();} else if(msg == AppConstant.PlayerMsg.STOP_MSG) {stop();}return super.onStartCommand(intent, flags, startId);}/*** 播放音乐* @param position*/private void play(int position) {try {mediaPlayer.reset();//把各项参数恢复到初始状态mediaPlayer.setDataSource(path);mediaPlayer.prepare();    //进行缓冲mediaPlayer.setOnPreparedListener(new PreparedListener(position));//注册一个监听器}catch (Exception e) {e.printStackTrace();}}/*** 暂停音乐*/private void pause() {if (mediaPlayer != null && mediaPlayer.isPlaying()) {mediaPlayer.pause();isPause = true;}}/*** 停止音乐*/private void stop(){if(mediaPlayer != null) {mediaPlayer.stop();try {mediaPlayer.prepare(); // 在调用stop后如果需要再次通过start进行播放,需要之前调用prepare函数} catch (Exception e) {e.printStackTrace();}}}@Overridepublic void onDestroy() {if(mediaPlayer != null){mediaPlayer.stop();mediaPlayer.release();}}/*** * 实现一个OnPrepareLister接口,当音乐准备好的时候开始播放**/private final class PreparedListener implements OnPreparedListener {private int positon;public PreparedListener(int positon) {this.positon = positon;}@Overridepublic void onPrepared(MediaPlayer mp) {mediaPlayer.start();   //开始播放if(positon > 0) {  //如果音乐不是从头播放mediaPlayer.seekTo(positon);}}}}

以上代码实现了两个需求,显示音乐列表和实现列表点击事件启动Servic。下次会实现控制音乐播放的需求。


Android应用开发--MP3音乐播放器代码实现(一)相关推荐

  1. Android应用开发--MP3音乐播放器代码实现(二)

    2013年5月25日 简.美音乐播放器开发 小巫在这里罗列这个播放器已经实现的功能: 1.   自动显示音乐列表 2.   点击列表播放音乐 3.   长按列表弹出对话框 4.   暂停音乐 5.   ...

  2. Android应用开发--MP3音乐播放器代码实现(二,android开发实例大全

    } switch (repeatState) { case isCurrentRepeat: // 单曲循环 repeatBtn .setBackgroundResource(R.drawable.r ...

  3. Android应用开发--MP3音乐播放器滚动歌词实现

    Android应用开发--MP3音乐播放器滚动歌词实现 2013年6月2日  简.美音乐播放器开发记录 -----前话 有网友给我博客评论说,让我借鉴好的Android代码,代码贴出来的时候最好整体先 ...

  4. Android应用开发--MP3音乐播放器Service实现

    Android应用开发--MP3音乐播放器Service实现 2013年5月29日简.美音乐播放器开发记录 让网友们久等啦,关于简.美音乐播放器的开发,最重要的Service类总算是要发博了.关于An ...

  5. Android应用开发 MP3音乐播放器滚动歌词实现

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Andr ...

  6. Android应用开发--MP3音乐播放器滚动歌词实现,flutter跳转动画

    2. 自定义View 3. 加入布局文件 4. 编写歌词处理类 5. 在Service里面实现同步更新歌词 ----代码实现 –LrcContent.java package com.wwj.sb.d ...

  7. 音乐应用开发Android应用开发--MP3音乐播放器界面设计(2)

    在写这篇文章之前,xxx已写过了几篇关于改音乐应用开发主题的文章,想要了解的朋友可以去翻一下之前的文章 Android应用开发--MP3音乐播放器界面计划(2) 2013年5月25日 简.美音乐播放器 ...

  8. Android应用开发--MP3音乐播放器界面设计(1)

    Android应用开发--MP3音乐播放器界面设计(1)                                           近期突然想自己开发一款MP3播放器,所以就有了上面的界面, ...

  9. Android应用开发--MP3音乐播放器界面设计(2)

    Android应用开发--MP3音乐播放器界面设计(2) 2013年5月25日 简.美音乐播放器开发 真得很无奈,原本打算很快结束这个实战项目的,但因为各种满课.学科.杂事给耽误了进度,现在小巫的这个 ...

最新文章

  1. 看看那些令人惊艳的入库方案
  2. 在eclipse中查看Android源代码
  3. 介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现
  4. web app 自适应方案总结 弹性布局之rem
  5. python字典元素的值是否相等_对Python中等值和大小比较
  6. 采用状态空间法求解八数码问题
  7. SQL创建触发器以及触发器的使用实例+详解
  8. 身份与访问管理技术在智慧城市的应用
  9. CTFSHOW-MISC入门
  10. 买牛奶 (c++基础)
  11. node.js 腾讯镜像站_史上最强Sx05RE游戏整合镜像发布!FBA4ARM永久闭源并停止发布!...
  12. 一口气搞懂「文件系统」,就靠这 25 张图了
  13. 边缘计算的100个术语
  14. linux 查看文件创建时间
  15. 【Python爬虫】从零开始爬取Sci-Hub上的论文(串行爬取)
  16. 如何还原sqlserver数据库或还原bak文件
  17. 计算机开机后黑屏一闪一闪怎么办,电脑屏幕老一闪一闪的,一会黑屏一会又亮了,有时...-显示屏闪黑屏重新开机...
  18. 一款带ai基因的向导般生成ppt的神奇网站
  19. cookie实现自动登陆原理
  20. 一行代码教你伪装黑客

热门文章

  1. 全网通用Python点赞器(俗称刷分机器)
  2. couchdb android,CouchDB on android 入门
  3. FPGA蜂鸣器实现歌曲《两只老虎》
  4. smtp服务认证过程
  5. iconfont在项目中的使用方式
  6. react 子组件使用 props.history.push 无法跳转或者显示pushunderfind 问题
  7. java 带界面的小程序_JAVA 编写一个带有窗口的应用程序
  8. FPGA中触发器和锁存器总结
  9. 生物医学工程SCI期刊投稿(转)
  10. 自然语言处理研究综述