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…

SQLServer常见的数学函数梳理

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

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

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

android stadio svn 使用技巧

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

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

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

树二叉树二叉搜索树

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

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

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

SQLServer知识:sqlcmd用法笔记

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

SQLServer书写规范梳理

今天给大家分享SQLServer书写规范笔记,希望对大家能有所帮助!1、在名称中仅使用字母、数字和下划线要在名称中仅使用字母、数字和下划线,主要是因为这些字符可以被方便的移植到编程语言中。在应用程序的数据库和编程语言中能够使用相同的属性字段名称&am…

visio调整形状位置_VISIO绘图技巧—三相桥式全控整流电路绘制

前些天有网友留言询问如何画三相桥式全控整流电路,一直没时间回复。今天得闲在家,给大家介绍一下如何来画。上图是一个三相桥式全控整流电路原理图,大部分图形元件在VISIO自带的图形库中都能找到,下面来看看如何找出我们需要的绘图…

电脑术语科普:什么是“显卡交火”?

有时候看到别人在讨论显卡交火的话题,相信大家对显卡交火这个术语了解得也比较少,那么它是什么意思呢? 显卡交火简单的说就是:让两块或者多块显卡在一台机子上协同工作,相比于使用一张显卡图形性能有所提升。 目前主流显卡交火有…

Mac查看本机ip地址

Mac查看本机ip地址 ifconfig | grep "inet" 箭头处为ip地址

SQL Azure与SQL Server两者的对比介绍,看完你就懂了!

今天给大家SQL Azure与SQL Server两者的对比介绍,看完你就懂了!1、SQL Server介绍SQL Server数据库服务方式是安装在客户提供的服务器内。客户负责硬件、、软件安装、安全性、数据库备份、灾难恢复等相关的运维工作。需要较高的人为运维成本。2、SQL Azu…

如何用HTML语言设计进度条,html5代码如何实现进度条功能?(示例)

本篇文章主要介绍html5代码如何实现进度条功能,希望对大家有所帮助。html5代码实现进度条功能具体代码示例如下:/*实现进度条的功能*/下载进度:/*js代码*/var pgdocument.getElementById(pg);setInterval(function(e){if(pg.value!100) pg.va…

Flink是什么

一:Flink是什么

SQL Server数据库架构与对象相关知识笔记

1、数据库架构简介数据库架构是从SQL Server2005版本之后引入的概念。数据库架构独立于创建它的数据厍用户而存在,每个对象都属于一个数据库架构(对象包括表、视图、存储过程、函数、触发器等)2、 数据库、架构和数据库对象数据库架构是一个独…

蒙提霍尔悖论(三门问题)终极分析(补充)附完整源码

上一篇文章分析了经典的蒙提霍尔问题,最后的结论是更换选择后有2/3的机会中奖。蒙提霍尔问题到此已经完结,但事实却并非如此。 在蒙提霍尔问题中,主持人事先知道汽车在哪个门后面,并且他一定会选择没有汽车的那扇门。如果我们稍稍…