Android MediaPlayer setDataSource()引发IllegalStateException错误
虽然我使用几乎相同的代码来播放两个视频,但第一个可以完美地工作,而第二个则不行。当我按下“下一个视频”按钮时,程序因以下原因崩溃:Android MediaPlayer setDataSource()引发IllegalStateException错误,android,video,media-player,Android,Video,Media Player,虽然我使用几乎相同的代码来播放两个视频,但第一个可以完美地工作,而第二个则不行。当我按下“下一个视频”按钮时,程序因以下原因崩溃: WARN/System.err(15726): java.lang.IllegalStateException WARN/System.err(15726): at android.media.MediaPlayer.setDataSource(Native Method) 源代码: 第一个播放代码: mediaPlayer = new Media
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();
}
为什么会发生这种情况?我只检查了两个不同的部分,第一个是新的mediaplayer,第二个是让mediaplayer停止并重置,然后是相同的。我也有同样的问题 您需要调用
mediaPlayer.reset()代码>在调用第二个视频之前mediaPlayer.setDataSource(uri)代码>原因是,因为函数mediaPlayer.setDataSource(uri)代码>只能在空闲状态下调用,并且mediaPlayer.reset()代码>是将您带到空闲状态的函数
我由此理解,尽管问题有点不同。“几乎相同的代码”。你能给他们两个都看吗?另外,您如何处理“下一个视频”按钮点击处理程序?你的方式应该是可行的。很多时候,这些类型的错误都与你试图播放的任何媒体的文件权限有关。如果你改变了视频的顺序,那么崩溃的视频会先播放怎么办?是第二个视频总是有问题,还是那个特定的视频?@ChadSchultz它总是第二个视频有问题,而不是特定的。@ThunderRabbit我想这不是为了这个,因为有两个视频A和B,无论我先播放哪个视频,都很好,第二个不好