android: 播放音频

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

 

方法名ide

功能描述布局

setDataSource()学习

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

prepare()spa

在开始播放以前调用这个方法完成准备工做。xml

start()对象

开始或继续播放音频。blog

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 按钮时,音乐就会重头开始播放了。

相关文章
相关标签/搜索