【问题标题】:Android MediaPlayer setDataSource() Throwing IllegalStateException ErrorAndroid MediaPlayer setDataSource() 抛出 IllegalStateException 错误
【发布时间】:2011-11-29 14:18:28
【问题描述】:

虽然我使用几乎相同的代码来播放两个视频,但第一个可以完美运行,但第二个不能。当我按下下一个视频按钮时,程序崩溃了:

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

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

【问题讨论】:

  • “几乎相同的代码”。你能把它们都展示出来吗?另外,您如何处理“下一个视频”按钮单击处理程序?你拥有它的方式应该可以工作。
  • 很多时候这些类型的错误与您尝试播放的任何媒体的文件权限有关..
  • 如果您更改视频的顺序,让崩溃的视频先播放会怎样?有问题的总是第二个视频,还是那个特定的视频?
  • @ChadSchultz 它总是第二个有问题的视频而不是特定的。
  • @ThunderRabbit 我觉得不是这样,因为有两个视频 A 和 B ,不管我先玩哪个,它都很好,而第二个则没有

标签: android video media-player


【解决方案1】:

我遇到了同样的问题。

在第二个视频调用mediaPlayer.setDataSource(uri);之前需要先调用mediaPlayer.reset();,原因是mediaPlayer.setDataSource(uri);函数只能在空闲状态调用,而mediaPlayer.reset();是带你去的函数空闲状态。

我从这个answer 中明白了这一点,尽管问题有点不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多