我在android中使用MediaPlayer
来流式传输通过ListView
添加的一些音频文件。从ListView
。
流很长(35分钟+),如果用户在流结束之前退出应用程序。然后,当在启动后从ListView
再次选择项目时,将从停止的同一位置恢复该流,而我希望每当从{{{{{{{{{ 1}}。
以下是代码:
ListView
我尝试在@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
musicService.player.reset();
musicService.player.release();
musicService.player = new MediaPlayer();
try {
musicService.player.setDataSource(skURL[position]);
} catch (IOException e) {
e.printStackTrace();
}
musicService.player.setAudioStreamType(AudioManager.STREAM_MUSIC);
musicService.player.prepareAsync();
musicService.player.setOnPreparedListener(this);
}
@Override
public void onPrepared(MediaPlayer mp) {
musicService.playSK();
}
//In the MusicService.java
public void playSK(){
player.start();
}
方法中将搜索位置设置为0,认为它可以解决问题,如
playSK()
它部分地做了。当选择public void playSK(){
player.seekTo(0);
player.start();
}
的第一项时,流始终从头开始,但单击任何其他项会出现以下错误:
ListView
更新:
所以我决定深入研究为什么在尝试寻找赛道的开头时会出现问题,我发现由于协议异常,媒体播放器无法获得持续时间。
MediaPlayer : error (-2147483648, 0)
MediaPlayer : start called in state 0
MediaPlayer : error (-38, 0)
MediaPlayer : Error (-2147483648, 0)
MediaPlayer : Error (-38, 0)
如何处理此异常并解决问题?
答案 0 :(得分:0)
尝试在musicService.player.release();
之后将媒体播放器对象设为nullmusicService.player = null;
我也面临这个问题,对我有用的唯一解决方法是将其设为null。如果您仍然遇到任何问题,请告诉我