android第三次作业

界面:
1121303-20181212165253472-1894691929.png
1121303-20181212165123576-30540107.png
主要代码:
1.定义一个工具类,在这个类中获取音频文件,并且对歌曲名、歌手和时间等进行格式规范:

package com.example.administrator.music;import android.content.Context;
import android.database.Cursor;
import android.provider.MediaStore;import java.util.ArrayList;
import java.util.List;
/*** Created by liuliu on 2018/1/14.*///工具类
public class Utils {//定义一个集合,存放从本地读取到的内容public static List<Song> list;public static Song song;public static List<Song> getmusic(Context context) {list = new ArrayList<>();Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.AudioColumns.IS_MUSIC);if (cursor != null) {while (cursor.moveToNext()) {song = new Song();song.song = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));song.singer = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));song.path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));song.duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));song.size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));//                把歌曲名字和歌手切割开if (song.size > 1000 * 800) {if (song.song.contains("-")) {String[] str = song.song.split("-");song.singer = str[0];song.song = str[1];}list.add(song);}}}cursor.close();return list;}//    转换歌曲时间的格式public static String formatTime(int time) {if (time / 1000 % 60 < 10) {String tt = time / 1000 / 60 + ":0" + time / 1000 % 60;return tt;} else {String tt = time / 1000 / 60 + ":" + time / 1000 % 60;return tt;}}}

2.定义一个布局text.xml用于展示每一个音频文件的内容,使用适配器把把内容映射到主布局文件中的ListView中去:

class MyAdapter extends BaseAdapter {Context context;List<Song> list;public MyAdapter(MainActivity mainActivity, List<Song> list) {this.context = mainActivity;this.list = list;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int i) {return list.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {Myholder myholder;if (view == null) {myholder = new Myholder();view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.text, null);myholder.t_position = view.findViewById(R.id.t_postion);myholder.t_song = view.findViewById(R.id.t_song);myholder.t_singer = view.findViewById(R.id.t_singer);myholder.t_duration = view.findViewById(R.id.t_duration);view.setTag(myholder);} else {myholder = (Myholder) view.getTag();}myholder.t_song.setText(list.get(i).song.toString());myholder.t_singer.setText(list.get(i).singer.toString());String time = Utils.formatTime(list.get(i).duration);myholder.t_duration.setText(time);myholder.t_position.setText(i + 1 + "");return view;}class Myholder {TextView t_position, t_song, t_singer, t_duration;}}

3.定义播放play()、暂停pause()、停止stop()和循环播放loop()方法:

    public void play(String path) {try {// 重置音频文件,防止多次点击会报错mediaPlayer.reset();// 调用方法传进播放地址mediaPlayer.setDataSource(path);//  异步准备资源,防止卡顿mediaPlayer.prepareAsync();// 调用音频的监听方法,音频准备完毕后响应该方法进行音乐播放mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mediaPlayer) {mediaPlayer.start();//设置循环播放。loop();}});} catch (Exception e) {e.printStackTrace();}}protected void play1() {mediaPlayer.start();//设置循环播放。loop();}protected void pause() {mediaPlayer.pause();button2.setEnabled(true);button2.setBackgroundColor(getResources().getColor(R.color.colorPrimary));}protected void stop() {if (mediaPlayer != null && mediaPlayer.isPlaying()) {mediaPlayer.stop();mediaPlayer.release();mediaPlayer = null;button2.setEnabled(true);Toast.makeText(this, "停止播放", Toast.LENGTH_LONG).show();}}protected  void loop(){mediaPlayer.setLooping(true);
}

4.给按钮添加点击事件:

    class myListener implements View.OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button2://避免重复播放,把播放按钮设置为不可用button2.setEnabled(false);button2.setBackgroundColor(Color.GRAY);//String p0 = list.get(current).path;//获得歌曲的地址if(one<1){String p = list.get(current).path;play(p);one++;}else {play1();}break;case R.id.button3:pause();break;case R.id.button1:if (current > 0) {current = current - 1;String p1 = list.get(current).path;//获得歌曲的地址play(p1);} else {current = list.size() - 1;String p1 = list.get(current).path;//获得歌曲的地址play(p1);}break;case R.id.button4:if (current + 1 < list.size()) {current = current + 1;String p2 = list.get(current).path;//获得歌曲的地址play(p2);} else {current = 0;String p2 = list.get(current).path;//获得歌曲的地址play(p2);}break;case  R.id.button5:stop();default:break;}}}

代码:https://git.coding.net/zwp598692456/androidmusic.git
app:https://coding.net/s/6d12c6ac-6efb-43ec-a2ab-f1332e3e5b57

转载于:https://www.cnblogs.com/qhdxzwp/p/10105761.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python try 异常处理 史上最全

在程序出现bug时一般不会将错误信息显示给用户&#xff0c;而是现实一个提示的页面&#xff0c;通俗来说就是不让用户看见大黄页&#xff01;&#xff01;&#xff01; 有时候我们写程序的时候&#xff0c;会出现一些错误或异常&#xff0c;导致程序终止. 为了处理异常&#xf…

Spring+Spring Security+JSTL实现的表单登陆的例子

2019独角兽企业重金招聘Python工程师标准>>> Spring Security允许开发人员轻松地将安全功能集成到J2EE Web应用程序中&#xff0c;它通过Servlet过滤器实现“用户自定义”安全检查。 在本教程中&#xff0c;我们将向您展示如何在Spring MVC中集成Spring Security 3…

数学教师计算机能力提升,深度融合信息技术,提升数学课堂魅力

原标题&#xff1a;深度融合信息技术&#xff0c;提升数学课堂魅力2018年小学数学教学与信息技术深度融合专题网络教研活动2018年10月31日&#xff0c;我校数学科组根据北片指导中心文件精神&#xff0c;进行了一次小学数学教学与信息技术深度融合专题网络教研活动。本次教研活…

Linux 内核启动流程

目录链接脚本vmlinux.ldsLinux 内核入口stext__mmap_switched 函数start_kernel 函数rest_init 函数init 进程看完Linux 内核的顶层Makefile 以后再来看Linux 内核的大致启动流程&#xff0c;Linux 内核的启动流程要比uboot 复杂的多&#xff0c;涉及到的内容也更多&#xff0c…

vs文件上传失败--超过最大字符限制

一、问题 在文件上传时&#xff0c;会遇到大文件上传失败。 》F12查看报错网络请求返回结果 》问题分析 由于vs上传文件默认的字符大小控制。 二、解决方法 》在web.config中修改或添加最大允许上传文件的大小 1 <system.web> 2 <httpRuntime targetFramework&q…

微计算机和微处理器的区别,CPU和微处理器的区别

CPU和微处理器是成功操作系统的基础。它们都执行不可或缺的计算机任务&#xff0c;例如算术&#xff0c;数据处理&#xff0c;逻辑和I / O操作&#xff0c;但是CPU与微处理器的区别并不是那么黑与白。尽管一些IT管理员可以互换使用CPU和微处理器&#xff0c;但现实是大多数CPU是…

向日葵在mac不能以服务器运行吗,mac远程桌面连接在哪?向日葵可以实现mac远程连接吗?...

目前大部分用户的电脑都是Windows系统的&#xff0c;也有部分用户用的Mac电脑&#xff0c;对于Mac电脑用户来说&#xff0c;许多操作与Windows都不同&#xff0c;比如他们就不知道mac远程桌面连接在哪?当遇到需要别人远程帮助时就无法调出&#xff0c;下面小编给大家讲解下它的…

根文件系统构建(BusyBox方式)

目录根文件系统简介BusyBox构建根文件系统BusyBox简介编译BusyBox构建根文件系统(生成bin、sbin、usr、linuxrc)向根文件系统添加lib库创建其他文件夹根文件系统初步测试完善根文件系统创建/etc/init.d/rcS文件创建/etc/fstab文件创建/etc/inittab文件根文件系统其他功能测试软…

kk 服务器信息,手机kk服务器设置

手机kk服务器设置 内容精选换一换已获取服务器管理员帐号与密码。打开CMD运行窗口&#xff0c;输入gpedit.msc&#xff0c;打开本地组策略编辑器。打开组策略在指定RD会话主机服务器的授权模式下拉列表中选择按用户。设置允许RD最大连接数位999999。设置结束已断开连接的会话为…

系统烧写方法(MfgTool烧写工具)

目录MfgTool 工具简介MfgTool 工作原理简介USB接线系统烧写原理烧写NXP 官方系统烧写自制的系统系统烧写网络开机自启动设置改造我们自己的烧写工具改造MfgTool烧写测试解决Linux 内核启动失败总结前面我们已经移植好了uboot 和linux kernle&#xff0c;制作好了根文件系统。但…

Android自带Monkey测试

Monkey是在模拟器上或设备上运行的一个小程序&#xff0c;它能够产生为随机的用户事件流&#xff0c;例如点击(click)&#xff0c;触摸(touch)&#xff0c;挥手&#xff08;gestures&#xff09;&#xff0c;还有一系列的系统级事件。可以使用Monkey来给正在开发的程序做随机的…

捣蛋鹅显示服务器已满,无题大鹅模拟奖杯攻略分享

捣蛋鹅成就怎么解锁&#xff1f;游戏章节不是很长&#xff0c;不同章节中都有不同的奖杯需要解锁&#xff0c;有些比较简单&#xff0c;有的需要一点点技巧&#xff0c;小编这里给大家带来了“PSN lyplyp_lll”总结的无题大鹅模拟奖杯攻略分享&#xff0c;一起来看下文中具体的…

线程的属性 —— 分离的状态(detached state)、栈地址(stack address)、栈大小(stack size)

参考&#xff1a;&#xff08;四十二&#xff09;线程——线程属性 作者&#xff1a;FadeFarAway 发布时间&#xff1a;2017-01-17 14:09:55 网址&#xff1a;https://blog.csdn.net/FadeFarAway/article/details/54576771 目录引入线程属性初始化一、线程的分离状态(detached …

【微信小游戏实战】零基础制作《欢乐停车场》二、关卡设计

1、游戏立项 微信小游戏中有一款《欢乐停车场Plus》的小游戏&#xff0c;大家可以搜索玩下。这是一款益智类的小游戏&#xff0c;游戏中有红、黄、绿、蓝、紫5辆豪车6个停车位&#xff0c;玩家通过可行走路线移动小车&#xff0c;最终让各颜色的小车停到对应的颜色车位&#xf…

线程同步(互斥锁、条件、读写锁、信号量)

参考&#xff1a;&#xff08;四十三&#xff09;线程——线程同步&#xff08;互斥锁、读写锁、条件变量、信号量&#xff09; 作者&#xff1a;FadeFarAway 发布时间&#xff1a;2017-01-17 21:25:28 网址&#xff1a;https://blog.csdn.net/FadeFarAway/article/details/545…

Nginx使用Expires增加浏览器缓存加速(转)

转载自&#xff1a;Nginx使用Expires增加浏览器缓存加速 Nginx可以更改HTTP头部&#xff0c;这个是Web服务器必须的&#xff0c;当然Nginx更可以支持在HTTP头部中添加Expires等相关信息&#xff0c;增强浏览器缓存&#xff0c;是网页加载速度增强。 Nginx中使用Expires增强浏览…

Linux curl命令详解

转自&#xff1a;https://www.cnblogs.com/duhuo/p/5695256.html 命令&#xff1a;curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具&#xff0c;可以说是一款很强大的http命令行工具。它支持文件的上传和下载&#xff0c;是综合传输工具&#xff0c;但按传统…

MAC地址、IP地址、ARP协议

B站视频&#xff1a;计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09; 网址&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb?p61 说明&#xff1a;讲的不错&#xff0c;后期可以继续看此视频学习网络知识 目录MAC地址IP地址ARP协议MAC地址 IP地址 ARP协…

编程学习网站

2019独角兽企业重金招聘Python工程师标准>>> ‍ 刚开始学习编程&#xff0c;如果只是拿着书本拼命敲代码&#xff0c;肯定是非常枯燥的。如果不是非常有决心和毅力可能就会轻易放弃了&#xff0c;有没有学习坡度不那么陡的教程呢&#xff1f; 让我们可以先学点基本的…

ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR

参考&#xff1a;堆栈指针寄存器 SP详解以及栈的作用 作者&#xff1a;蓝色鲜橙多 网址&#xff1a;https://blog.csdn.net/qq_36588941/article/details/89873633?utm_sourceapp&app_version4.16.0&codeapp_1562916241&uLinkIdusr1mkqgl919blen 目录堆栈的实现方…