需求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)); //音乐id
String 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 {
@Override
public 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; //暂停状态
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public 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();
}
}
}
@Override
public 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;
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start(); //开始播放
if(positon > 0) { //如果音乐不是从头播放
mediaPlayer.seekTo(positon);
}
}
}
}
以上代码实现了两个需求,显示音乐列表和实现列表点击事件启动Servic。下次会实现控制音乐播放的需求。希望对大家的学习有所帮助,也希望大家多多支持。
# android实现mp3播放器
# android
# 音乐播放器
# 利用libmp3lame实现在Android上录音MP3文件示例
# Android编程实现播放MP3功能示例
# Android实现使用流媒体播放远程mp3文件的方法
# 比较完整的android MP3 LRC歌词滚动高亮显示(附源码)
# Android递归方式删除某文件夹下的所有文件(.mp3文件等等)
# Android录制mp3格式文件
# 数据库中
# 媒体播放器
# 的是
# 如图
# 时长
# 大家多多
# 所有音乐
# 音乐播放
# 只把
# 每一项
# 实现了
# 音乐列表
# 下次
# 把每
# 迭代
# 内存卡
# DATA
# isMusic
# url
# size
相关文章:
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
制作网站外包平台,自动化接单网站有哪些?
高性价比服务器租赁——企业级配置与24小时运维服务
家庭建站与云服务器建站,如何选择更优?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
建站之星如何开启自定义404页面避免用户流失?
太平洋网站制作公司,网络用语太平洋是什么意思?
建站VPS能否同时实现高效与安全翻墙?
建站主机服务器选型指南与性能优化方案解析
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何通过网站建站时间优化SEO与用户体验?
临沂网站制作公司有哪些,临沂第四中学官网?
一键网站制作软件,义乌购一件代发流程?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
建站上市公司网站建设方案与SEO优化服务定制指南
如何用虚拟主机快速搭建网站?详细步骤解析
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
如何快速搭建响应式可视化网站?
表情包在线制作网站免费,表情包怎么弄?
如何在Windows服务器上快速搭建网站?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站主机选购指南:核心配置与性价比推荐解析
c# 服务器GC和工作站GC的区别和设置
如何通过VPS建站无需域名直接访问?
学校为何禁止电信移动建设网站?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
建站之星免费版是否永久可用?
如何快速搭建高效WAP手机网站?
小建面朝正北,A点实际方位是否存在偏差?
建站之星2.7模板快速切换与批量管理功能操作指南
贸易公司网站制作流程,出口贸易网站设计怎么做?
如何快速建站并高效导出源代码?
建站ABC备案流程中有哪些关键注意事项?
建站之星ASP如何实现CMS高效搭建与安全管理?
建站之星Pro快速搭建教程:模板选择与功能配置指南
建站VPS推荐:2025年高性能服务器配置指南
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星安装需要哪些步骤及注意事项?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
XML的“混合内容”是什么 怎么用DTD或XSD定义
装修招标网站设计制作流程,装修招标流程?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。