2014-01-20 53 views
1

我试图在PageViewer中流动2-3秒.ogg文件,我需要缓冲3-4个.ogg文件的能力,以便当它们点击预览。PageViewer中的媒体播放器的启动缓冲区(Android)

实施例:缩略图 的GridView被装载在任何缩略图 活动载荷 用户点击到ViewPager ViewPager显示图像加上一个播放按钮 点击播放的MediaPlayer会从网址 加载音频当我点击播放它有一个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 [I],它来了空。

回答

1

您只在第一个代码片段中创建一个MediaPlayer。然后,您创建一个空的MediaPlayer数组,并在添加播放器之前尝试访问它。因此,为了使其工作,您需要在设置数据源之前使用新的MediaPlayer设置arrayMediaPlayer [i]。

+0

啊!谢谢:)这已经解决了我的空指针。现在我需要弄清楚如何使prepareAsync不会抛出IllegalStateException,但我可以解决这个问题:) – Will