ArrayList<String> videolist = new ArrayList<>();
videolist.add("http://muurl.com/abc/song1.mp3");
videolist.add("http://muurl.com/abc/song2.mp3");
videolist.add("http://muurl.com/abc/song3.mp3");

Я сохранил звуковые ссылки в списке массивов. когда я нажимаю кнопку, я хочу воспроизводить этот звук один за другим, когда я нажимаю кнопку, второй звук должен начинаться с первой звуковой ссылки

3
Manoj k 23 Ноя 2020 в 09:26

2 ответа

Лучший ответ

Вот решение, удовлетворяющее трем условиям:

  • Когда пользователь нажимает кнопку «Пуск» в первый раз, приложение будет воспроизводить список видео одно за другим.

  • Когда пользователь нажимает кнопку «Пуск» второй раз, приложение воспроизводит первое видео в списке видео.

  • Отпустите MediaPlayer, когда приложение перейдет в фоновый режим

< EM> MainActivity.java

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private List<String> videolist;
    private int currentPlayingPosition;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity);

        videolist = new ArrayList<>();
        videolist.add("http://muurl.com/abc/song1.mp3");
        videolist.add("http://muurl.com/abc/song2.mp3");
        videolist.add("http://muurl.com/abc/song3.mp3");

        // User click this button to play video in video list
        Button buttonPlayVideoList = findViewById(R.id.buttonPlayVideoList);
        buttonPlayVideoList.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playVideoList();
            }
        });
    }

    private void playVideoList() {
        if (mediaPlayer == null) {
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setLooping(false);
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mediaPlayer.start();
                }
            });
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    ++currentPlayingPosition;
                    if (currentPlayingPosition < videolist.size()) {
                        playVideoAtPosition(currentPlayingPosition);
                    }
                }
            });
        }
        currentPlayingPosition = 0;
        playVideoAtPosition(currentPlayingPosition);
    }

    private void playVideoAtPosition(int position) {
        try {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(videolist.get(position));
            mediaPlayer.prepareAsync();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onStop() {
        // Release media player when app goes to background
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer.release();
        }
        super.onStop();
    }
}
2
Son Truong 23 Ноя 2020 в 09:51

Взгляните на класс MediaPlayer в сочетании с OnCompletionListener:

Вы бы сделали что-то вроде:

int playListPos = 0; // declare this outside the button click probably as a global variable (so we can access it and increment in the on click listener of the button

// the below code should go inside the button click
String url = videolist.get(playListPos); // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
    AudioAttributes.Builder()
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .build()
);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    // this will be called every time a file is finished playing
    if (videolist.size() < playListPos) { // let's see if there is more files to play
        mediaPlayer.setDataSource(videolist.get(playlistPos));
        mediaPlayer.prepare();
        mediaPlayer.start();
        playListPos++;
    } else {
         // we played until the end. reset to 0 for when button is clicked again to restart from the beginning
         playListPos = 0;
   }
});
mediaPlayer.start();
3
David Kroukamp 23 Ноя 2020 в 07:46
64963481