在 Android 中播放音频文件一般都是使用 MediaPlayer 类来实现的,它对多种格式的音 频文件提供了非常全面的控制方法,从而使得播放音乐的工作变得十分简单。下表列出了 MediaPlayer 类中一些较为常用的控制方法。

方法名

功能描述

setDataSource()

设置要播放的音频文件的位置。

prepare()

在开始播放之前调用这个方法完成准备工作。

start()

开始或继续播放音频。

pause()

暂停播放音频。

reset()

将 MediaPlayer 对象重置到刚刚创建的状态。

seekTo()

从指定的位置开始播放音频。

stop()

停止播放音频。调用这个方法后的 MediaPlayer 对象无法再播放音频。

release()

释放掉与 MediaPlayer 对象相关的资源。

isPlaying()

判断当前 MediaPlayer 是否正在播放音频。

getDuration()

获取载入的音频文件的时长。

简单了解了上述方法后,我们再来梳理一下 MediaPlayer 的工作流程。首先需要创建出一个 MediaPlayer 对象,然后调用 setDataSource()方法来设置音频文件的路径,再调用 prepare()方法使 MediaPlayer 进入到准备状态,接下来调用 start()方法就可以开始播放音频,调用 pause()方法就会暂停播放,调用 reset()方法就会停止播放。 下面就让我们通过一个具体的例子来学习一下吧,新建一个 PlayAudioTest 项目,然后

修改 activity_main.xml 中的代码,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" >

<Button android:id="@+id/play" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Play" />

<Button android:id="@+id/pause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Pause" />

<Button android:id="@+id/stop" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Stop" />

</LinearLayout>

布局文件中横向放置了三个按钮,分别用于对音频文件进行播放、暂停和停止操作。然 后修改 MainActivity 中的代码,如下所示:

public class MainActivity extends Activity implements OnClickListener {

private Button play;

private Button pause;

private Button stop;

private MediaPlayer mediaPlayer = new MediaPlayer();

@Override

protected void
onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

play = (Button) findViewById(R.id.play);

pause = (Button) findViewById(R.id.pause);

stop = (Button)
findViewById(R.id.stop); play.setOnClickListener(this); pause.setOnClickListener(this);
stop.setOnClickListener(this);

initMediaPlayer(); // 初始化MediaPlayer

}

private void initMediaPlayer() {

try {

File file
= new File(Environment.getExternalStorageDirectory(),
"music.mp3");

mediaPlayer.setDataSource(file.getPath()); // 指定音频文件的路径

mediaPlayer.prepare(); // MediaPlayer进入到准备状态

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.play:

if (!mediaPlayer.isPlaying()) {

mediaPlayer.start(); // 开始播放

}

break;

case R.id.pause:

if (mediaPlayer.isPlaying()) {

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

}

break;

case R.id.stop:

if (mediaPlayer.isPlaying()) {

mediaPlayer.reset(); // 停止播放

initMediaPlayer();

}

break;

default:

break;

}

}

@Override

protected void onDestroy() {

super.onDestroy();

if (mediaPlayer != null) {

mediaPlayer.stop();

mediaPlayer.release();

}

}

}

可以看到,在类初始化的时候我们就创建了一个 MediaPlayer 的实例,然后在 onCreate()
方法中调用了 initMediaPlayer()方法为 MediaPlayer 对象进行初始化操作。在 initMediaPlayer()
方法中,首先是通过创建一个 File
对象来指定音频文件的路径,从这里可以看出,我们需要 事 先 在 SD 卡 的 根 目 录 下 放 置 一 个 名 为 music.mp3 的 音 频 文 件 。 后 面 依 次 调 用 了 setDataSource()方法和 prepare()方法为 MediaPlayer 做好了播放前的准备。

接下来我们看一下各个按钮的点击事件中的代码。当点击 Play 按钮时会进行判断,如 果当前 MediaPlayer 没有正在播放音频,则调用 start()方法开始播放。当点击 Pause
按钮时会 判断,如果当前 MediaPlayer 正在播放音频,则调用 pause()方法暂停播放。当点击 Stop 按钮 时会判断,如果当前 MediaPlayer 正在播放音频,则调用 reset()方法将 MediaPlayer 重置为刚
刚创建的状态,然后重新调用一遍 initMediaPlayer()方法。

最后在 onDestroy()方法中,我们还需要分别调用 stop()和 release()方法,将与 MediaPlayer相关的资源释放掉。 这样一个简易版的音乐播放器就完成了,现在将程序运行到手机上,界面如图 8.19
所示。

图   8.19

点击一下 Play 按钮就可以听到优美的音乐了,然后点击 Pause 按钮声音会停住,再次点
击 Play 按钮会接着暂停之前的位置继续播放。这时如果点击一下 Stop 按钮声音也会停住,
但是再次点击 Play 按钮时,音乐就会重头开始播放了。

android: 播放音频的更多相关文章

  1. 【转】Android播放音频MediaPlayer的几种方式介绍

    接下来笔者介绍一下Android中播放音频的几种方式,android.media包下面包含了Android开发中媒体类,当然笔者不会依次去介绍,下面介绍几个音频播放中常用的类: 1.使用MediaPl ...

  2. Android播放音频的两种方式

    一种使用MediaPlayer,使用这种方式通常是播放比较长的音频,如游戏中的背景音乐. 代码如下: private MediaPlayer mPlayer = null; mPlayer = Med ...

  3. Android应用开发学习笔记之播放音频

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android支持常用音视频格式文件的播放,本文我们来学习怎样开发Android应用程序对音视频进行操作. Andr ...

  4. Android音视频之AudioTrack播放音频(二)

    前一篇讲了如何录制wav音频文件,本篇就来讲讲如何播放wav文件,这里就是使用AudioTrack来播放音频,确切的说是播放pcm格式数据,使用AudioTrack播放也没什么难度,主要就是将数据写入 ...

  5. 【转】解决在Android设备播放音频与其他应用重音的问题,并监听耳机的控制按钮

    概述 在安卓开发中免不了需要播放一点音乐了,音频了.但是这时候有别的应用正在播放,这时候就会出现重音的现象,完全影响用户体验,我们的项目就遇上了这样的尴尬,然后查找了一些文档,记录一下: 管理音频焦点 ...

  6. 【Android】播放音频的几种方式介绍

    接下来笔者介绍一下Android中播放音频的几种方式,android.media包下面包含了Android开发中媒体类,当然笔者不会依次去介绍,下面介绍几个音频播放中常用的类: 1.使用MediaPl ...

  7. Android中使用SoundPool来播放音频

    今天找素材重做FlappyBird时学习了一下怎样为应用设置背景音频,发现通过封装SoundPool类就能够非常好的做到这一点. SoundPool类比較适合播放一些类似游戏音效这样的比較短促并且较小 ...

  8. Android学习总结(十六) ———— MediaPlayer播放音频与视频

    一.基本概念 本文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构.Android的MediaPlayer包含了Audio和video的播放功能,在Andr ...

  9. Android MediaPlayer 播放音频

    本文链接: Android MediaPlayer 播放音频 主要介绍使用MediaPlayer播放音频的方式.关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPla ...

随机推荐

  1. 测试C++代码与WebBrowser HTML的互动

    testWebBrowserDlg.h // testWebBrowserDlg.h : 头文件 // #pragma once #include "explorer1.h" #i ...

  2. DP总结

    最长回文子序列 int lpsDp(char * str,int n){ int dp[n][n], tmp; memset(dp,0,sizeof(dp)); for(int i=0; i<n ...

  3. java读取properties配置文件方法(一)

    为了修改项目参数方便,需要使用properties配置文件: 首先是需要三个jar包(不同的jar包,读取配置文件的方式会有所不同,这里使用的是2.6版本的jar包) commons configur ...

  4. POJ1222_EXTENDED LIGHTS OUT

    给出5*6的位置,每个位置有一个灯,一开始每个灯有各自的状态,你可以选定一些位置使得所有与这个位置相邻以及位置本身的灯都取反. 输出合法方案. 本来是找高斯消元找到这个题目的,可是....我发现可以直 ...

  5. C# 基础(3)

    跳转语句 Goto(现在一般不使用) 标志位 Flag true false 常量:(不可改变的量) 语法: Const 类型 变量名 = 常量值 在定义时赋值,其他地方不能赋值 枚举 是自己定义了一 ...

  6. com.alibaba.fastjson.JSONObject学习

    JSONObject json = new JSONObject(); //设置json属性,可以是对象,数值 json.put("key",value); //获取json的普通 ...

  7. MVC过滤器

    MVC的每一个请求都会给相应的控制器的对应行为方法处理,那么想在这些处理的前 前后后增加一些额外的逻辑处理,因此过滤器的作用就来了 MVC支持的过滤器类型有四种,分别是:Authorization(授 ...

  8. Win7启动修复(Ubuntu删除后进入grub rescue的情况)

    起因:装了win7,然后在另一个分区里装了Ubuntu.后来格掉了Ubuntu所在的分区.系统启动后出现命令窗口:grub rescue:_ 正确的解决方式: 1.光驱插入win7安装盘或者用USB启 ...

  9. vijos1144(小胖守皇宫)

    也是ural1039 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步 ...

  10. 《LINUX内核设计与实现》读书笔记之第一章和第二章

    一.第一章 1. Unix内核的特点简洁:仅提供系统调用并有一个非常明确的设计目的抽象:几乎所有东西都被当做文件可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力进程:创建 ...