我正在尝试在PageViewer中传输2-3秒的.ogg文件,我需要能够缓冲3-4个.ogg文件,以便在点击预览时即时。
实施例: 加载了缩略图的Gridview 用户点击任何缩略图 活动加载到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。
答案 0 :(得分:1)
您只在第一个代码段中创建一个MediaPlayer。然后创建一个MediaPlayer类型的空数组,并尝试在添加播放器之前访问它。因此,要使其工作,您需要在设置数据源之前使用新的MediaPlayer设置arrayMediaPlayer [i]。