android音乐播放器完整教程,android实现简单音乐播放器

本文实例为大家分享了android音乐播放器的具体代码,供大家参考,具体内容如下

话不多说先上效果

fe2a36382c4833445d15b89b4f8b8a43.gif

前言

写这个音乐播放器实在是迫不得已。因为我们Andoird课程要求写一个音乐播放器。所以就有了此项目。这个项目比较简单,实现了最基本的音乐播放功能,然后界面是仿照着网易云音乐的样式,写的想写成一样但是技术不够。

基本的音乐播放

设置播放音乐文件

Android播放媒体文件大概都是使用MediaPlayer这个类来操作的。

在播放音乐前,必须要给这个MediaPlayer设置一要播放的东西,对于文件资源来说(音乐,视频都算一种文件资源),能够唯一标识它的就是文件的地址(路径)。我们这里使用的是本机音乐,那么就使用文件路径就可以。

private static final MediaPlayer mediaPlayer = new MediaPlayer();

/**

* 设置播放文件

* @param path

*/

public static void setPlayPath(String path){

try {

// 设置类型

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

// 这里要reset一下啊 (当已经设置过音乐后,再调用此方法时,没有reset就会异常)

mediaPlayer.reset();

mediaPlayer.setDataSource(path);// 设置文件源

mediaPlayer.prepare();// 解析文件

} catch (IOException e) {

e.printStackTrace();

}

}

播放音乐

设置完播放文件后,下一步就是音乐的播放、暂停、跳进度播放等等。

这里先介绍MediaPlayer的自带方法

mediaPlayer.isPlaying();// 是否正在播放

mediaPlayer.start(); // 开始播放,如果已经在播放不会有什么效果

mediaPlayer.stop(); // 停止播放 - 不可以使用start重新开始

mediaPlayer.pause(); // 暂停当前播放

mediaPlayer.seekTo(0); // 移动到某一播放进度

mediaPlayer.getCurrentPosition();// 获取当前播放进度

了解了上面的方法后那么就可以实现几乎所有的音乐播放功能。

那么要实现音乐播放功能只需要在调用了setPlayPath(path)后再调用mediaPlayer.start()就能成功的播放音乐前提条件是你确实的设置了正确的音乐路径

获取音乐的信息

获取音乐信息可以使用MediaMetadataRetriever类来获取。它和MediaPlayer也需要一个文件路径来寻找到音乐。

private static final MediaMetadataRetriever mmr = new MediaMetadataRetriever();

public static Song getSong(String path){

Song song = new Song();// 自己定义的歌曲类

song.setPath(path);

// 获取音乐相关信息

mmr.setDataSource(path);

// 歌曲名

String title = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);

song.setTitle(title);

// 唱片集

String album = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);

song.setAlbum(album);

// (艺术家)歌手

String artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);

song.setArtist(artist);

// 歌曲长度(时间长度 单位 mm)

int duration = Integer.parseInt(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); // 播放时长单位为毫秒

song.setDuration(duration);

// 歌曲的图片

byte[] image = mmr.getEmbeddedPicture();// 图片,可以通过BitmapFactory.decodeByteArray转换为bitmap图片

// BitmapFactory.decodeByteArray(image, 0, image.length);

song.setImage(image);

return song;

}

其他功能

其他功能都是基于Android的事件和以上播放功能加上MediaMetadataRetriever获取音乐信息来实现的。所以就不详细介绍直接贴代码吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

相关文章

编译原理

编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 这门课程是一门真正与代码做斗争的课程,对于一个有至于追…

JDK1.8 JVM元数据区取代了永久代,元数据空间并不在虚拟机中,而是使用本地内存

JDK1.8 JVM运行时内存数据区域划分。1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是…

SQLServer常用的字符串函数梳理

今天给大家分享一下SQLServer常用的字符串函数知识笔记,希望对大家能有所帮助!1、ASCII(字符串表达式)作用:返回表达式最左侧字符串的ASCII代码值。示例:SELECT ASCII(ABC),ASCII(A) --返回结果都是65 计算的是第一个字符串的ASCI…

tchar linux,错误:Error:未定义标识符_TCHAR

svn sc create 命令行创建服务自启动今天重装了系统,Subversion服务也得重装.照例输入代码: sc create svnserve binpath"d:\PortableApps\svn\svnserve.exe - ...Spring&lowbar;Springmvc&lowbar;mybatis一般配置web.xml配置 <?xml version"1.0" e…

Mac 系统引导过程概述 BootCamp 的秘密

http://bbs.feng.com/read-htm-tid-6890655.html转载于:https://www.cnblogs.com/zengkefu/p/5857710.html

开封机器人餐厅_百合汇主题酒店——开封首家机器人服务员餐厅

【中原经济网开封新闻讯】 (河南经济报记者 张长剑 李海) 年底岁末&#xff0c;服务行业的用工荒逐渐凸显&#xff0c;不过&#xff0c;开封百合汇主题酒店的老板却不为此发愁&#xff0c;因为&#xff0c;这家店刚刚引进了两台高大上的机器人服务员。2月3日&#xff0c;记者在…

SQLServer常见的数学函数梳理

今天给大家分享一下SQLServer常见的数学函数相关的知识笔记。1.绝对值函数ABS(x)和返回圆周率的函数PI()ABS(x)返回x的绝对值,PI()返回圆周率的值用法&#xff1a;select ABS(5),ABS(-10.6),ABS(-99),PI();输出结果&#xff1a;5 10.6 99 3.141592653589792.平方根函数SQRT(x)S…

android 属性动画变大,Android PropertyAnimation 属性动画(一)初探

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;前言相对于静态的页面&#xff0c;动画往往能更直观地表达所需的信息&#xff0c;在UI开发过程中起着相当大的作用。Android为我们提供了一系列实现动画效果的方法…

android stadio svn 使用技巧

有时候有这样的需求&#xff1a; 就是我一次要改很多的需求&#xff0c;然后代码要分开提交&#xff0c;那么怎么办&#xff1f; 提交的时候一个一个的点开看&#xff1f; 比如&#xff1a;这次改的还没有提上去&#xff0c;又来了一个需求&#xff0c;怎么区分呢 新建一个ac…

用扫地机器人楼下吵吗_扫地机器人到底好不好用?说说我两年的使用体验!

原标题&#xff1a;扫地机器人到底好不好用&#xff1f;说说我两年的使用体验&#xff01;说到扫地机器人绝大部分人都非常陌生&#xff0c;因为我国目前还处在扫地机器人发展初期阶段&#xff0c;连一线城市普及率都只有5%&#xff0c;所以非常理解大家对新事物的恐惧和排斥&a…

SQLServer常用的日期和时间函数梳理

今天给大家分享一下SQLServer常用的日期和时间函数知识笔记&#xff0c;希望对大家能有所帮助&#xff01;1、DATEADD(datepart,number,date)作用&#xff1a;返回给指定日期加一个时间间隔后新的datetime值参数说明&#xff1a;datepart&#xff1a;指定为日期的哪部分增加数值…

树二叉树二叉搜索树

树&二叉树 树是由节点和边构成&#xff0c;储存元素的集合。节点分根节点、父节点和子节点的概念。 二叉树binary tree&#xff0c;则加了“二叉”&#xff08;binary&#xff09;&#xff0c;意思是在树中作区分。每个节点至多有两个子&#xff08;child&#xff09;,left…

努比亚连续按下android版本,虚惊一场!努比亚Z17的Android 9.0真的不远了

01努比亚Z17将推送安卓9.0中关村在线消息&#xff1a;前不久&#xff0c;有消息传出努比亚Z17开发者版本系统将停止更新&#xff0c;并将永远停留在Android 7.0之后&#xff0c;引起了众多牛仔们的一篇叹息。大家纷纷在惋惜的同时&#xff0c;也着实对努比亚的做法有些不理解。…

websocket 西部数码php_网页实时聊天之PHP实现websocket

前言websocket 作为 HTML5 里一个新的特性一直很受人关注&#xff0c;因为它真的非常酷&#xff0c;打破了 http “请求-响应”的常规思维&#xff0c;实现了服务器向客户端主动推送消息&#xff0c;本文介绍如何使用 PHP 和 JS 应用 websocket 实现一个网页实时聊天室&#xf…

String有两种赋值方式

String有两种赋值方式&#xff0c;第一种是通过“字面量”赋值。 String str "Hello"; 第二种是通过new关键字创建新对象。 String str new String("Hello");

SQLServer知识:sqlcmd用法笔记

今天给大家介绍sqlcmd用法笔记&#xff0c;希望对大家能有所帮助&#xff01; 1、介绍 sqlcmd是一个 Microsoft Win32 命令提示实用工具&#xff0c;可以通过该命令工具实现SQL语句、脚本的执行&#xff0c;并且可以实现脚本任务的自动化。 2、使用场景 2.1 针对大文件脚本的执…

aes c android ios,AES加密在iOS和Android中产生不同的结果

尝试使用AES128算法加密样本数据,在Android和iOS中使用CBC和PKCS7填充,但结果不同:(Android代码&#xff1a;private static final byte[] KEY { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10};int srcBuffSiz 1024;byt…

树形DP+树状数组 HDU 5877 Weak Pair

1 //树形DP树状数组 HDU 5877 Weak Pair2 // 思路&#xff1a;用树状数组每次加k/a[i]&#xff0c;每个节点ansSum(a[i]) 表示每次加大于等于a[i]的值3 // 这道题要离散化4 5 #include <bits/stdc.h>6 using namespace std;7 #define LL long long8 typedef pair<int…