虽然我使用几乎相同的代码来播放两个视频,但第一个完美无缺,但第二个没有。当我按下一个视频按钮时,程序崩溃了:
WARN/System.err(15726): java.lang.IllegalStateException
WARN/System.err(15726): at android.media.MediaPlayer.setDataSource(Native Method)
源代码:
第一个播放代码:
mediaPlayer = new MediaPlayer();
playURI = receiveIntent.getStringExtra("playURI");
showDebugInfo("play uri "+playURI);
Log.e("Gplayer on create", "play uri "+playURI);
try {
mediaPlayer.setDataSource(playURI);
} catch (IllegalArgumentException e) {
Log.v(LOGTAG, e.getMessage());
finish();
} catch (IllegalStateException e) {
Log.v(LOGTAG, e.getMessage());
finish();
} catch (IOException e) {
Log.v(LOGTAG, e.getMessage());
finish();
}
按下一个按钮时,它会运行以下代码:
String uri = listAdapter.getItem(position).getItem().getFirstResource().getValue();
showDebugInfo(" Uri "+uri);
if(mediaPlayer != null){
mediaPlayer.stop();
}
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(uri);
mediaPlayer.prepareAsync();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
finish();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
finish();
}
为什么会这样?我检查两个部分只是不同的,第一个是新的媒体播放器,第二个是让媒体播放器停止并重置然后相同。
答案 0 :(得分:0)
我遇到了同样的问题。
在播放第二个视频mediaPlayer.reset();
之前,您需要先调用mediaPlayer.setDataSource(uri);
,原因是因为mediaPlayer.setDataSource(uri);
函数只能在空闲状态下调用,而{{1} }是使您进入空闲状态的功能。
即使问题有所不同,我也从answer中了解到这一点。