Как последовательно воспроизводить медиа (mp3) внутри публичного void-метода - PullRequest
1 голос
/ 24 сентября 2019

Например, у меня есть публичный метод void shuffle.Я хочу, чтобы, когда я щелкаю (onclick) пункт меню, некоторые медиа (mp3) внутри этого метода воспроизводились последовательно и после последнего медиа перестали воспроизводиться.я хочу, чтобы case позиции воспроизводились последовательно от case 0 до case 3, а после воспроизведения case 3 медиаплеер прекращает воспроизведение.мне нужно, чтобы они играли автоматически, как после case 0, автоматически запускается case 1, затем case 2, case 3.я не знаю, как реализовать 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;     
                }
            }
        });

1 Ответ

1 голос
/ 24 сентября 2019

попробуйте ниже код:

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();
}
...