音频播放由于每个应用的需求不同,所以具体实现也就不同,不过大概框架在那,对于音频列表的播放,写了一个类,放在这今后备用。
1、音频播放类:
package com.example.mediaplayer;
import java.io.IOException;
import java.util.ArrayList;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
public class MediaPlay
{
private MediaPlay( ){
// 禁止被外部类实例化
}
public static void startMedia( Context context, int audioId ){
stopMedia();
mMediaPlayer = MediaPlayer.create( context, audioId );
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener( new OnCompletionListener() {
@Override
public void onCompletion( MediaPlayer mp ) {
if( null != mp ){
mp.stop( );
mp.release( );
}
mMediaPlayer = null;
}
});
}
public static void startMediaPlayList( Context context, MediaPlayCallBack soundPlayCallBack, ArrayList playList, int startIndex ){
if( null == playList || playList.size( ) == 0 || startIndex >= playList.size( ) ){
return;
}
mMediaPlayerCallBack = soundPlayCallBack;
mAudioPlayIdList = new ArrayList( );
mAudioPlayIdList = playList;
mCurrentListIndex = startIndex;
if( null != mMediaPlayerCallBack ){
mMediaPlayerCallBack.mediaPlayCallBack( MediaPlayCallBack.TYPE_ID, MediaPlayCallBack.STATE_START, 0 );
}
startMediaId( context, mAudioPlayIdList.get( mCurrentListIndex ) );
}
private static void startMediaId( final Context context, int audioId ){
mMediaPlayer = MediaPlayer.create( context, audioId );
try {
mMediaPlayer.prepare( );
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener( new OnCompletionListener() {
@Override
public void onCompletion( MediaPlayer mp ) {
if( null != mp ){
mp.stop( );
mp.release( );
}
mMediaPlayer = null;
if( null != mAudioPlayIdList ){
mCurrentListIndex++;
if( mCurrentListIndex < mAudioPlayIdList.size( ) ){
mMediaPlayerCallBack.mediaPlayCallBack( MediaPlayCallBack.TYPE_ID, MediaPlayCallBack.STATE_CUT, mCurrentListIndex );
startMediaId( context, mAudioPlayIdList.get( mCurrentListIndex ) );
}else{
if( null != mMediaPlayerCallBack ){
mMediaPlayerCallBack.mediaPlayCallBack( MediaPlayCallBack.TYPE_ID, MediaPlayCallBack.STATE_STOP, mAudioPlayIdList.size( ) );
}
}
}
}
});
}
public static void stopMedia( )
{
if( mMediaPlayer != null && mMediaPlayer.isPlaying( ) )
{
mMediaPlayer.stop( );
mMediaPlayer = null;
if( null != mAudioPlayIdList ){
if( null != mMediaPlayerCallBack ){
mMediaPlayerCallBack.mediaPlayCallBack( MediaPlayCallBack.TYPE_ID, MediaPlayCallBack.STATE_PAUSE, -1 );
mMediaPlayerCallBack = null;
}
mAudioPlayIdList = null;
}
mCurrentListIndex = 0;
if( null != mMediaPlayerCallBack ){
mMediaPlayerCallBack.mediaPlayCallBack( MediaPlayCallBack.TYPE_PATH, MediaPlayCallBack.STATE_PAUSE, -1 );
}
}
}
private static int mCurrentListIndex = 0;
private static MediaPlayer mMediaPlayer = null;
private static MediaPlayCallBack mMediaPlayerCallBack = null;
private static ArrayList mAudioPlayIdList = null;
}
2、音频播放回调:
package com.example.mediaplayer;
public interface MediaPlayCallBack {
public static final int STATE_START = 0; // STATE 音频播放状态
public static final int STATE_PLAY = 1;
public static final int STATE_PAUSE = 2;
public static final int STATE_STOP = 3;
public static final int STATE_CUT = 4;
public static final int TYPE_PATH = 0; // TYPE 列表或者单个文件
public static final int TYPE_ID = 1;
/**
* @param type 播放模式
* @param state 播放状态
* @param position 当前播放的第几个音频
* */
public void mediaPlayCallBack( int type, int state, int position );
}
3、测试类:
package com.example.mediaplayer;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import com.example.traceviewtest.R;
public class MediaPlayerActivity extends Activity implements MediaPlayCallBack {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView( R.layout.mediaplayer_layout );
getAudioList( );
}
@Override
public void mediaPlayCallBack(int type, int state, int position) {
System.out.println( "type == " + type + " state == " + state + " position == " + position );
}
public void onClick( View v ){
switch( v.getId( ) ){
case R.id.mediaPlayBtnId:{
MediaPlay.startMedia( MediaPlayerActivity.this, audioList.get( 0 ) );
}break;
case R.id.mediaPlayListBtnId:{
MediaPlay.startMediaPlayList( MediaPlayerActivity.this, MediaPlayerActivity.this, audioList, 0 );
}
break;
default:{
}
break;
}
}
private void getAudioList( ){
audioList = new ArrayList( );
audioList.add( R.raw.bless_1 );
audioList.add( R.raw.bless_2 );
audioList.add( R.raw.bless_3 );
audioList.add( R.raw.bless_4 );
audioList.add( R.raw.bless_5 );
}
private ArrayList audioList = null;
}