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

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

1.   从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象

2.   迭代List集合,把每一个Mp3Info对象的所有属性,保存到Map对象当中

3.   定义一个List集合,把Map对象添加到List集合当中

4.   通过定义一个SimpleAdpter,调用setAdpter方法,将数据显示到列表当中

/**

  • 用于从数据库中查询歌曲的信息,保存在List当中

  • @return

*/

public List getMp3Infos() {

Cursor cursor = getContentResolver().query(

MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,

MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

List mp3Infos = new ArrayList();

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 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) {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

设计模式学习笔记

设计模式系列学习视频

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

设计模式学习笔记

[外链图片转存中…(img-q414fn37-1711787002401)]

设计模式系列学习视频

[外链图片转存中…(img-wY3CDC4m-1711787002401)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值