java - 如何在 public void 方法中连续播放媒体(mp3)

标签 java android android-mediaplayer shuffle

例如,我有 public void 方法 shuffle。我希望当我单击 (onclick) 菜单项时,此方法中的一些媒体 (mp3) 会连续播放,并且在最后一个媒体之后停止播放。我希望 case 位置从 case 0 连续播放到 case 3 播放完 case 3 媒体播放器停止播放.我需要它们自动播放,比如在 case 0 之后自动开始 case 1 然后是 case 2,case 3。我不知道如何在这个公共(public)方法中实现 mediaplayer.setOnCompletionListener

public class MainActivity extends AppCompatActivity{

ListView lv;
MediaPlayer mediaPlayer;
int position = 0;

}


@Override
    protected void onCreate(Bundle savedInstanceState) {

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
            position = pos;
           .....
           .....

}

public void shuffle1(MenuItem item){
        mediaPlayer.stop();

        if(position > 3){
            position = 0;

        }
        else if(position < 0){
            position = 3;
        }

        switch(position){

            case 0:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al098);
                break;
            case 1:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al099);
                break;
            case 2:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al100);
                break;
            case 3:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al101);
                break;
        }

        mediaPlayer.start();
}

EDIT: I did like this, but still no affect:


    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            public void onCompletion(MediaPlayer mp) {
                if(position == 0){
                    position++;
                    mediaplayer.start();
                }else if (position ==1){
                    position++;
                    mediaplayer.start();
                }else if (position ==2){
                    position++;
                    mediaplayer.start();
                }else if (position ==3){
                    position++;
                    mediaplayer.start();
                }else if (position ==4){
                    mediaplayer.stop();
                return;     
                }
            }
        });

最佳答案

试试下面的代码:

public void shuffle1(MenuItem item){
        mediaPlayer.stop();

        switch(position){

            case 0:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al098);
                break;
            case 1:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al099);
                break;
            case 2:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al100);
                break;
            case 3:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al101);
                break;
        }
        position++;
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            public void onCompletion(MediaPlayer mp) {
                if(position == 4){
                    mediaPlayer.stop();
                    return;
                } else {
                    shuffle1(item);
                }
            }
        });

        mediaPlayer.start();
}

编辑

根据评论中要求的更改

public void shuffle1(final MenuItem item, int startPosition, boolean playNow){
        mediaPlayer.stop();

        int position = this.position;
        if(playNow){
            position = startPosition;
        }
        switch(position){

            case 0:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al098);
                break;
            case 1:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al099);
                break;
            case 2:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al100);
                break;
            case 3:
                mediaPlayer  = MediaPlayer.create(this, R.raw.al101);
                break;
        }
        if(!playNow){
            this.position++;
        }        
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            public void onCompletion(MediaPlayer mp) {
                if(this.position == 4){
                    mediaPlayer.stop();
                    return;
                } else {
                    shuffle1(item, this.position, false);
                }
            }
        });

        mediaPlayer.start();
}

关于java - 如何在 public void 方法中连续播放媒体(mp3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58074244/

相关文章:

Android MediaPlayer 流式传输在网络更改时停止

android - 连续播放声音 onTouch()

java - 使用 Resin 服务器上的方法初始化 ServletContext

java - 单击任何 ListView 项目时,将该项目文本显示到 EditText 中

安卓工作室 : "shared" module directories of KMM project keep getting unmarked as sources root

java - 有没有办法让按下一个按钮多次激活随机数生成器/数组?

java - 如何将日志记录添加到被 Proguard 剥离的 Android Java 应用程序?

java - Hibernate 打开/关闭 session ,DAO 的正确方法

android - 如何在此 android 示例中添加 TitleBar?

java - 为什么 MediaPlayer 没有准备好?