Android MediaPlayer setDataSource()抛出IllegalStateException错误

时间:2011-11-29 14:18:28

标签: android video media-player

虽然我使用几乎相同的代码来播放两个视频,但第一个完美无缺,但第二个没有。当我按下一个视频按钮时,程序崩溃了:

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();
    }

为什么会这样?我检查两个部分只是不同的,第一个是新的媒体播放器,第二个是让媒体播放器停止并重置然后相同。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

在播放第二个视频mediaPlayer.reset();之前,您需要先调用mediaPlayer.setDataSource(uri);,原因是因为mediaPlayer.setDataSource(uri);函数只能在空闲状态下调用,而{{1} }是使您进入空闲状态的功能。

即使问题有所不同,我也从answer中了解到这一点。