2014-01-20 3 views
1

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

Пример: Gridview миниатюр загружаются пользователь нажимает на любой эскиз активности нагрузок в ViewPager ViewPager отображает изображение плюс кнопки воспроизведения При нажатии на кнопку Play на MediaPlayer будет загружать аудио с URL Когда я нажимаю играть он имеет задержку 1-4 секунды до тех пор, пока воспроизведение не начнется Я проведите по следующей странице и коснитесь кнопки воспроизведения с другой задержкой 1-4 секунды

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

Эти файлы небольшие, 25-100kb.

общественного недействительными 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) { 

     } 
    }); 

// UPDATE:

Я пытался создать 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 [я], его придумывают утратившим.

ответ

1

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

+0

Ах! спасибо :) Это разрешило мой нулевой указатель. Теперь мне нужно выяснить, как заставить prepareAsync не бросать IllegalStateException, но я могу устранить эту проблему :) – Will

Смежные вопросы