android 音频列表,Android中MediaPlayer播放音频和音频列表

本文介绍了如何在Android中实现音频播放,包括使用MediaPlayer类进行单个音频播放和创建音频列表播放的功能。通过MediaPlay类,可以实现音频列表的无缝切换,并提供了回调接口MediaPlayCallBack以监听播放状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音频播放由于每个应用的需求不同,所以具体实现也就不同,不过大概框架在那,对于音频列表的播放,写了一个类,放在这今后备用。

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值