Запустить буфер для медиаплеера в PageViewer (Android)

Я пытаюсь передать 2-3 секундные файлы.ogg в PageViewer, мне нужна возможность буферизовать 3-4 файла.ogg, чтобы они мгновенно нажимали на кнопку предварительного просмотра.

Пример: загружается сетка просмотра миниатюр. Пользователь нажимает на любую миниатюру. Загрузка загружается в ViewPager. ViewPager отображает изображение и кнопку воспроизведения. Нажатие кнопки "Воспроизвести" MediaPlayer загрузит звук с URL-адреса. Когда я нажимаю кнопку "Воспроизвести", задержка воспроизведения составляет 1–4 секунды. начинается, я провожу до следующей страницы и нажимаю кнопку воспроизведения с задержкой в ​​1-4 секунды

Можно ли предварительно загрузить / буферизовать следующие 2-3 вкладки ViewPager, чтобы у меня было мгновенное воспроизведение?

Эти файлы маленькие, 25-100kb.

public void playmusic () {

    try {

        this.mediaPlayer = new MediaPlayer();
        if (mediaPlayer.isPlaying() || mediaPlayer != null) {
            this.stopAudio();
            this.mediaPlayer.stop();
        }
        this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        this.mediaPlayer.setDataSource(arrayURLAudio[getPos()]);
        this.mediaPlayer.prepare();
        this.mediaPlayer.start();
    } catch (IOException ioe) {

    }catch (IllegalThreadStateException itse){

    }catch (Exception e){

    }

Также

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {

        }

        @Override
        public void onPageSelected(int i) {
            if (mediaPlayer != null) {
                stopAudio();
            }
            textView.setText(arrayURLAnimalName[i]);
            setPos(i);

        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

//ОБНОВИТЬ:

Я пытался создать массив MediaPlayer[], но это выглядит как ноль.

Переменная экземпляра: MediaPlayer[] arrayMediaPlayer;

OnCreate:

    arrayMediaPlayer = new MediaPlayer[arrayURLAudio.length];

    for (int i = 0; i < arrayURLAudio.length; i++) {
        try {
              arrayMediaPlayer[i].setDataSource(arrayURLAudio[i]);
        } catch (IOException ioe) {
        } catch (NullPointerException npe) {
        };

Если я попытаюсь распечатать мой arrayMediaPlayer[i], он получит значение null.

1 ответ

Решение

Вы создаете только один MediaPlayer в своем первом фрагменте кода. Затем вы создаете пустой массив типа MediaPlayer и пытаетесь получить к нему доступ, прежде чем добавлять игроков. Поэтому, чтобы он работал, вам нужно установить arrayMediaPlayer[i] с новым MediaPlayer, прежде чем устанавливать источник данных.

Другие вопросы по тегам