2014-01-20 50 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