Android第三次作业
制作音乐播放器
实现的功能:
歌曲的播放、暂停、停止、上一首、下一首、歌单列表的显示(获取本地歌曲)。
成品图:

功能代码实现:
实现歌曲的播放、暂停、停止、上一首、下一首:
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第三次作业的更多相关文章
- android 第三次作业
android studio音乐播放器 一.实现功能: 1.读取本地SD中的所有音频文件 2.歌单列表展示,并显示音频具体信息 3.进度条显示当前播放进度,可滑动加速 4.点击歌单进行播放 5.实现暂 ...
- 2017-2018-1 JaWorld 第三周作业
2017-2018-1 JaWorld 第三周作业 团队展示 队员学号 队名 团队项目描述 队员风采 团队的特色 团队合照 团队初步合作 前两周的反思与总结 需要改进的地方 团队选题 *采访老师或有开 ...
- 2017-2018-1 JAVA实验站 第三周作业
2017-2018-1 JAVA实验站 第三周作业 团队展示 队名 JAVA实验站 拟作的团队项目描述 (2048)增加其他模式,使得2048更加丰富多彩 团队的首次合照 团队的特色描述 团队内部很团 ...
- 耿丹CS16-2班第三次作业汇总
-- Deadline: 2016-10-12 22:48 -- 作业内容: 1.实验2-6 猜数字游戏 2.实验2-7 判断能否为三角形 3.实验2-8 个人所得税计算器 -- 第三次作业总结: 1 ...
- JAVA第三周作业(从键盘输入若干数求和)
JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...
- 第三次作业:caculator
第三次作业 作业链接 ********* 遇到的问题: Scan类: 队列的使用方法不了解,上网查询并自己练习了一下才初步了解,才运用到作业 . 判断数字用的 if (input[i] >= ' ...
- HTML第三天作业做的表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- 第三次作业——《K米评测》
第三次作业--<K米评测> 一.调研.评测 上手体验 APP的图标做的不错,一眼就知道和KTV唱歌相关的 点进去就是连接包箱的界面和直播界面,把软件最重要的两个功能展示出来了,一目了然 热 ...
- 软件工程(QLGY2015)第三次作业点评(含成绩)
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...
随机推荐
- static 关键字 静态成员变量及静态成员函数
static类成员 类成员类似于C语言的全局变量,但是与全局变量又有所不同,例如,全局变量是可以被任何的用户代码所修改,而且全局变量破坏了对象的封装性. 使用类的 static 成员的优点 使用 st ...
- Babel学习小记
一.babel配置文件中的plugins和presets是什么? 1.首先说说babel是什么,babel是一个JavaScript转码器,帮助我们把浏览器不兼容的ES6语法转换成ES5语法: 2.接 ...
- JSONP以及端口
跨域的方式有多种今天我呢,给大家带来的是JSONP接口的操作和接口 JSONP的接口到处都有 今天先拿BOOS直聘的来给大家演示一遍吧 首先找到boss官网:https://www.zhipin.co ...
- [转] golang中struct、json、map互相转化
一.Json和struct互换 (1)Json转struct例子: type People struct { Name string `json:"name_title"` Age ...
- Java版InfluxDB工具类
InfluxDB工具类 package com.influxdb.test; import java.util.Map; import org.influxdb.InfluxDB; import or ...
- 利用 Google Chart API 生成二维码大小不一致
大小不一致是由于 chl 参数内容不一样导致的,而 chs 参数只能指定生成图片的大小,不能指定生成具体二维码大小. 比如:https://chart.googleapis.com/chart?ch ...
- 项目debug启动不起来解决办法
debug起服务,读取文件可能会出错,eclipse自动加断点,这时候就卡住了,这时候eclipse——window——show view breakpoints-——remove all,重新启动t ...
- 个人版整理APP测试流程
2016.1.5 我的笔记 一 .APP测试基本流程 1.1 测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试 ...
- js简单实现自动轮播
//简单一个布局存放图片 <div class="lb"> <div class="lbt"> <img src="im ...
- 马拉车算法——poj3974
https://segmentfault.com/a/1190000008484167?tdsourcetag=s_pctim_aiomsg 讲的超好! manacher算法理解 回文串分为偶回文串和 ...