首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在android中使用mediaPlayer来连续播放2个或2个以上的mp3文件?

如何在android中使用mediaPlayer来连续播放2个或2个以上的mp3文件?
EN

Stack Overflow用户
提问于 2016-01-22 09:21:06
回答 2查看 2.1K关注 0票数 4

我正在创建一个android应用程序,希望它能一个接一个地播放多个mp3文件。

我的应用程序上有一个mediaPlayer,如何设置一个播放mp3文件的队列?

EN

回答 2

Stack Overflow用户

发布于 2016-01-22 10:55:55

实现这一点的方法是创建一个实现OnCompletionListener的类,该类处理onCompletion并接收下一个要播放的文件。首先将您的类定义为PlayMedia,如下所示:

代码语言:javascript
运行
复制
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.AsyncTask;
import android.util.Log;

public class PlayMedia extends AsyncTask<Void, Void, Void> {

    private static final String LOG_TAG = PlayMedia.class.getSimpleName();

    Context context;
    private MediaPlayer mediaPlayer;
    int[] soundIDs;
    int idx =1;

    public PlayMedia(MediaPlayer mediaPlayer) {
        this.mediaPlayer = mediaPlayer;
    }
    public PlayMedia(final Context context, final int[] soundIDs) {
        this.context = context;
        this.soundIDs=soundIDs;
        mediaPlayer = MediaPlayer.create(context,soundIDs[0]);
        setNextMediaForMediaPlayer(mediaPlayer);
    }

    public void setNextMediaForMediaPlayer(MediaPlayer player){
        player.setOnCompletionListener(new OnCompletionListener() {         
            public void onCompletion(MediaPlayer mp) {
                if(soundIDs.length>idx){
                    mp.release();
                    mp = MediaPlayer.create(context,soundIDs[idx]);
                    setNextMediaForMediaPlayer(mp);
                    mp.start();
                    idx+=1;
                }               
            }
        });
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            mediaPlayer.start();
        } catch (IllegalArgumentException e) {
            Log.e(LOG_TAG, "", e);
        } catch (SecurityException e) {
            Log.e(LOG_TAG, "", e);
        } catch (IllegalStateException e) {
            Log.e(LOG_TAG, "", e);
        }

        return null;
    }
}

然后像这样使用PlayMedia:

代码语言:javascript
运行
复制
int[] soundIDs = {R.raw.firstmp3, R.raw.secondmp3};
PlayMedia playAudio = new PlayMedia(context,soundIDs);
playAudio.execute();
票数 5
EN

Stack Overflow用户

发布于 2020-09-29 22:23:28

您可以设置一个LinkedList和一个互补的ListIterator来管理MediaPlayers队列。

对于您知道应该在队列中的每个mp3文件,使用MediaPlayer.create();创建的媒体播放器调用ListIterator的add()方法

需要注意的是,在管理队列时需要非常小心迭代器的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34937437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档