前面在一些示例中已经涉及到如何使用MediaPlayer播放音频,使用MediaPlayer的静态方法creat()加载音频前面已经介绍过,但使用creat方法每次都会返回新创建的MediaPlayer,这个就不太适合循环播放多个音频文件,这时可以使用setDataSource方法装载音频文件,它提供如下几个方法:
1.void setDataSource(String path):指定装载path路径所代表的文件。
2.void setDataSource(FileDescriptor fd,long offset,long length):指定装载fd所代表的文件中从offset开始、长度为length的文件内容。
3.void setDataSource(FileDescriptor fd):指定装载fd所代表的文件。
4.void setDataSource(Context context,Uri uri):指定装载uri所代表的文件。此方法可以播放网络的音频文件。
其实setDataSource后,程序并未真正装载音频文件,而是在执行prepare()方法时,才真正装载音频文件。
另外MediaPlayer还提供了一些绑定事件监听器的方法,如下:
至于使用静态方法creat播放raw资源文件中的音频文件和播放原始资源文件的音频,在前面原始资源的使用一文已介绍,这里只介绍播放外部存储器上的音频文件,代码如下:
package com.home.activity; import com.home.mediaplayertest.R; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private Button startBtn; private Button pauseBtn; private Button stopBtn; private MediaPlayer player; private boolean isPause = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startBtn = (Button) findViewById(R.id.main_btn_play); pauseBtn = (Button) findViewById(R.id.main_btn_pause); stopBtn = (Button) findViewById(R.id.main_btn_stop); startBtn.setOnClickListener(this); pauseBtn.setOnClickListener(this); stopBtn.setOnClickListener(this); // 实例化MediaPlayer对象 player = new MediaPlayer(); } @Override public void onClick(View v) { if (v == startBtn) { if (isPause) { // 重置MediaPlayer对象 player.reset(); try { // 装载指定音频 player.setDataSource(Environment .getExternalStorageDirectory() + "/girl.mp3"); // 真正装载指定音频文件 player.prepare(); // 播放音乐 player.start(); // 设置是否循环播放 player.setLooping(true); isPause = false; } catch (Exception e) { e.printStackTrace(); } } else { player.start(); } } if (v == pauseBtn) { // 暂停播放 player.pause(); } if (v == stopBtn) { // 停止播放 player.stop(); isPause = true; } } }