最近使用MediaPlayer 实现播放 静态资源文件,即res目录下raw目录下的文件

实现连续播放:
mMediaPlayer = MediaPlayer.create(this, res);
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}

});
============================
MediaPlayer还有多种使用方式和方法,并不只局限于例子所介绍的一种。具体来看:
1)如何获得MediaPlayer实例:
可以使用直接new的方式:
MediaPlayer mp = new MediaPlayer();
也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了


2) 如何设置要播放的文件:
MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");


MediaPlayer的setDataSource一共四个方法:
setDataSource (String path)
setDataSource (FileDescriptor fd)
setDataSource (Context context, Uri uri)
setDataSource (FileDescriptor fd, long offset, long length)


3)对播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:
prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()和stop()比较简单,起到暂停和停止播放的作用,

seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。


4)设置播放器的监听器:
MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,
如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性
========================================
package com.android.music_player;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;

public class ActivityMain extends ListActivity {

// 定义 按钮
private ImageButton mFrontImageButton = null;
private ImageButton mStopImageButton = null;
private ImageButton mStartImageButton = null;
private ImageButton mPauseImageButton = null;
private ImageButton mNextImageButton = null;
// 声明MediaPlayer mMediaPlayer
private MediaPlayer mMediaPlayer = null;
// 播放列表
private List<Integer> mMusicList = new ArrayList<Integer>();
// 当前播放歌曲的索引
private int currentListItem = 0;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 更新显示播放列表
musicList();
// 构建MediaPlayer对象,以及ImageButton
mMediaPlayer = new MediaPlayer();

mFrontImageButton = (ImageButton) this
.findViewById(R.id.LastImageButton);
mStopImageButton = (ImageButton) this
.findViewById(R.id.stopImageButton);
mStartImageButton = (ImageButton) this
.findViewById(R.id.StartImageButton);
mPauseImageButton = (ImageButton) this
.findViewById(R.id.PauseImageButton);
mNextImageButton = (ImageButton) this
.findViewById(R.id.NextImageButton);

// 停止按钮
mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {
// 判断是否正在播放
if (mMediaPlayer.isPlaying()) {
// 重置MediaPlayer到初始化状态
mMediaPlayer.reset();
}

}

});

// 开始按钮
mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {
playMusic(mMusicList.get(currentListItem));

}

});

// 暂停
mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {
if (mMediaPlayer.isPlaying()) {
// 暂停
mMediaPlayer.pause();
} else {
// 开始播放
mMediaPlayer.start();
}
}

});

// 下一首
mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {
nextMusic();
}

});

// 上一首
mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() {

public void onClick(View v) {
FrontMusic();
}

});

}

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
mMediaPlayer.stop();
mMediaPlayer.release();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}

// 录点击列表是,播放被点击的音乐
protected void onListItemClick(ListView l, View v, int position, long id) {
currentListItem = position;
playMusic(mMusicList.get(position));
}

// 播放列表
private void musicList() {
try {
// 取得指定位置的文件设置显示到播放列表
mMusicList.add(R.raw.rmb1);
mMusicList.add(R.raw.rmb2);
mMusicList.add(R.raw.rmb3);
mMusicList.add(R.raw.rmb4);
mMusicList.add(R.raw.rmb5);
mMusicList.add(R.raw.rmb6);
mMusicList.add(R.raw.rmb7);
mMusicList.add(R.raw.rmb8);
mMusicList.add(R.raw.rmb9);
mMusicList.add(R.raw.rmb0);
ArrayAdapter<Integer> musicList = new ArrayAdapter<Integer>(
this, R.layout.musicitme, mMusicList);
setListAdapter(musicList);
} catch (Exception ex) {
ex.printStackTrace();
}
}

// 播放音乐
private void playMusic(Integer res) {
try {
// 重置MediaPlayer
mMediaPlayer = MediaPlayer.create(this, res);
// 准备播放
//mMediaPlayer.prepare();
// 开始播放
mMediaPlayer.start();
// 播放完毕后,设置监听事件
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播完一首之后进行下一首
mp.release();
nextMusic();
}

});
}catch (Exception e) {
e.printStackTrace();
}
}

// 下一首
private void nextMusic() {
if (++currentListItem >= mMusicList.size()) {
// currentListItem = 0;
// playMusic(mMusicList.get(currentListItem));// 从第一首歌开始播放
} else {
playMusic(mMusicList.get(currentListItem));
}
}

// 上一首
private void FrontMusic() {

if (--currentListItem > 0) {
playMusic(mMusicList.get(currentListItem));
} else {
// 如果当前currentListItem等于-1,则设置currentListItem=0
// if (currentListItem < 0) {
// currentListItem = 0;
// }
// playMusic(mMusicList.get(currentListItem));
}

}


}
-----------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton android:id="@+id/LastImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="10px" android:layout_y="70px" android:src="@drawable/last" />

<ImageButton android:id="@+id/stopImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="70px" android:layout_y="70px" android:src="@drawable/stop" />
<ImageButton android:id="@+id/StartImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="130px" android:layout_y="70px" android:src="@drawable/start" />

<ImageButton android:id="@+id/PauseImageButton"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_x="190px" android:layout_y="70px" android:src="@drawable/pause" />
<ImageButton android:id="@+id/NextImageButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_x="250px" android:layout_y="70px" android:src="@drawable/next" />
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:drawSelectorOnTop="false" />
</AbsoluteLayout>
---------------------
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>