制作音乐播放器

实现的功能:

歌曲的播放、暂停、停止、上一首、下一首、歌单列表的显示(获取本地歌曲)。

成品图:

功能代码实现:

实现歌曲的播放、暂停、停止、上一首、下一首:

 public void onClick(View v) {//按钮功能实现
switch (v.getId()){
case R.id.pre:
changeMusic(--current);//切哥
break;
case R.id.play:
if (mediaPlayer==null){//如果没有歌在播放
changeMusic(0);//切歌到第一首
}else {//如果有歌在播放
if (!mediaPlayer.isPlaying())//如果歌曲恰好没有正在播放
{
mediaPlayer.start();//继续播放
} else {//如果歌曲恰好正在播放
Toast.makeText(MainActivity.this, "已经在播放", Toast.LENGTH_SHORT).show();//弹出提示信息
}
}
break;
case R.id.next:
changeMusic(++current);//切歌
break;
case R.id.pause:
if(mediaPlayer.isPlaying()){//如果歌曲恰好正在播放
mediaPlayer.pause();//暂停播放
}
break;
case R.id.stop:
if(mediaPlayer.isPlaying()){//如果歌曲恰好正在播放
mediaPlayer.reset();//重置歌曲
try{
mediaPlayer.setDataSource(list.get(0).path);//获取第一首歌的资源
mediaPlayer.prepare();//准备播放
}catch(IOException e){
e.printStackTrace();
}
}
break;
}
}

  歌单列表的实现(涉及两个文件):

//在MainActivity.java文件中
private void init(){//初始化
listview=(ListView)findViewById(R.id.listview);//为listview添加监听
list=new ArrayList<>();//建立存放歌曲的list列表
Cursor a=c.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.AudioColumns.IS_MUSIC);//获取本地音乐资源
if(a!=null){
while(a.moveToNext()){//读取音乐资源
SongInfomation x=new SongInfomation();//建立空音乐信息类的对象,方便对歌曲信息读取
x.song = a.getString(a.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));//获取歌曲
x.singer = a.getString(a.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));//获取歌手名
x.path = a.getString(a.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));//获取路径
x.size = a.getLong(a.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));//获取大小
x.duration=a.getInt(a.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));//获取持续
if(x.size>1000*800){
if(x.song.contains("-")){//如果歌名中包含字符‘-’
String[] s=x.song.split("-");//按‘-’进行分割
x.song=s[1];//将后半部分作为歌名存储
x.singer=s[0];//将前半部分作为歌手名存储
}
list.add(x);//将已经存储信息的歌曲信息对象放入列表
}
}
a.close();
} //在Adapter1.java文件中
public View getView(final int i, View view, ViewGroup viewGroup) {
Display dis = null;
if (view == null) {
dis = new Display();
view = View.inflate(context, R.layout.song, null);//找到展示歌曲信息的布局文件,也就是我的项目中的“menu.xml”文件
dis.song = (TextView) view.findViewById(R.id.song);//监听、绑定歌单,将信息放到Display的对象中
dis.singer = (TextView) view.findViewById(R.id.singer);
dis.duration = (TextView) view.findViewById(R.id.duration);
dis.position = (TextView) view.findViewById(R.id.postion);
view.setTag(dis);//给view添加信息
} else {
dis = (Display) view.getTag();//可以通过getTag方法提取出我用setTag添加的信息,然后返回给Display的对象
}
dis.song.setText(list.get(i).song.toString());//将Display对象的一些需要的属性展示在界面或者传给需要的变量
dis.singer.setText(list.get(i).singer.toString());
int duration=list.get(i).duration;
dis.position.setText(i+1+"");//歌曲序列数的实现
return view;
}

  

代码地址(内含APK):https://git.coding.net/mmxf/android3.2.0.git

Android第三次作业的更多相关文章

  1. android 第三次作业

    android studio音乐播放器 一.实现功能: 1.读取本地SD中的所有音频文件 2.歌单列表展示,并显示音频具体信息 3.进度条显示当前播放进度,可滑动加速 4.点击歌单进行播放 5.实现暂 ...

  2. 2017-2018-1 JaWorld 第三周作业

    2017-2018-1 JaWorld 第三周作业 团队展示 队员学号 队名 团队项目描述 队员风采 团队的特色 团队合照 团队初步合作 前两周的反思与总结 需要改进的地方 团队选题 *采访老师或有开 ...

  3. 2017-2018-1 JAVA实验站 第三周作业

    2017-2018-1 JAVA实验站 第三周作业 团队展示 队名 JAVA实验站 拟作的团队项目描述 (2048)增加其他模式,使得2048更加丰富多彩 团队的首次合照 团队的特色描述 团队内部很团 ...

  4. 耿丹CS16-2班第三次作业汇总

    -- Deadline: 2016-10-12 22:48 -- 作业内容: 1.实验2-6 猜数字游戏 2.实验2-7 判断能否为三角形 3.实验2-8 个人所得税计算器 -- 第三次作业总结: 1 ...

  5. JAVA第三周作业(从键盘输入若干数求和)

    JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...

  6. 第三次作业:caculator

    第三次作业 作业链接 ********* 遇到的问题: Scan类: 队列的使用方法不了解,上网查询并自己练习了一下才初步了解,才运用到作业 . 判断数字用的 if (input[i] >= ' ...

  7. HTML第三天作业做的表格

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  8. 第三次作业——《K米评测》

    第三次作业--<K米评测> 一.调研.评测 上手体验 APP的图标做的不错,一眼就知道和KTV唱歌相关的 点进去就是连接包箱的界面和直播界面,把软件最重要的两个功能展示出来了,一目了然 热 ...

  9. 软件工程(QLGY2015)第三次作业点评(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...

随机推荐

  1. 在vscode中使用eslint+prettier格式化vue项目代码 (转载)

    ESlint:javascript代码检测工具,可以配置每次保存时格式化js,但每次保存只格式化一点点,你得连续按住Ctrl+S好几次,才格式化好,自行体会~~ vetur:可以格式化html.标准c ...

  2. reuters-多分类问题

    from keras.datasets import reuters import numpy as np from keras.utils.np_utils import to_categorica ...

  3. Consumer高级特性

    Queue队列的消息一般是按照顺序各个队列依次获取消息,每次获取一个.所以假设有两个队列queue1,queue2,发送的消息为1.2.3.4.5.则默认情况下queue1获取到的消息为1.3.5,q ...

  4. C# 登陆验证码工具类VerifyCode

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; ...

  5. c++入门篇七

    拷贝构造函数的调用时机: class Person { public: //构造函数 Person() { //无参构造函数 } Person(int a) { //有参构造函数 cout <& ...

  6. Eclipse install new software无反应

    一个问题可以有不同的解决方案 其他人提供了不少方案 我遇到了这个问题 但是这些解决方案都无济于事 于是 我就采取了一个新方案: 然后重新解压,找到里面的eclipse.exe重新打开就可以了 现在有反 ...

  7. 团队软件的NABCD——星遇

    日期:2019.4.17 博客期:053 星期三 我们项目是个面向希望有新奇体验的用户的社交软件,致力于打造不一样的有趣的社交. N:(Need,需求) 目前主流社交软件由于时间原因体量越来越大,各种 ...

  8. netty 服务器端流程调度Flow笔记

    create NioEventLoopGroup Instance 一.NioServerSocketChannel init note:Initializing ChannelConfig crea ...

  9. clearTimeout方法在IE上的兼容问题

    今天在修改公司项目的bug时发现一个问题,出错代码如下: clearTimeout(); setTimeout(function(){ // 具体业务逻辑 },100); 这段代码在chrome.fi ...

  10. Keil相关问题

    1.keil重选则器件 2. 移植FREERTOS出错 .\Objects\RTOSDemo.axf: Error: L6406E: No space in execution regions wit ...