【问题标题】:How to fix IllegalStateException in Mediaplayer如何修复 Mediaplayer 中的 IllegalStateException
【发布时间】:2018-11-27 12:58:07
【问题描述】:

我在 OnItemClick 中创建了一个列表视图和 MediaPlayer。

        listSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Song song = mAdapter.getItem(position);
            mPlayer = MediaPlayer.create(MainActivity.this, song.getmSongResourceId());
            if (mPlayer != null) {
                mPlayer.release();
            }
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener () {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mPlayer.start();
                    mPlayer.pause();
                    controller.show(0);
                }
            });

            mPlayer.start(); //error here
            controller.show(0);
        }
    });


@Override
public void start() {
    mPlayer.start();
}

@Override
protected void onStop() {
    super.onStop();
    mPlayer.pause();
    controller.hide();
}

当点击项目活动时关闭。这是logcat:

java.lang.IllegalStateException
    at android.media.MediaPlayer._start(Native Method)
    at android.media.MediaPlayer.start(MediaPlayer.java:1228)
    at com.....MainActivity$2.onItemClick(MainActivity.java:432)
    at android.widget.AdapterView.performItemClick(AdapterView.java:314)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1162)
    at java.lang.reflect.Method.invoke(Native Method)

MainActivity.java:432 是mPlayer.start();。 什么是IllegalStateException,如何解决?您可能会说我的帖子是 this 帖子重复,但我不确定如何将其解决方案应用于我的代码。

【问题讨论】:

  • 你应该在完成后打电话给release(),而不是在start()之前
  • @bwt,你的意思是在 onCompletion 方法中?
  • 一旦你知道你将不再使用它。基本上,一旦发布了媒体播放器实例,您就无法对其进行任何操作

标签: android android-mediaplayer illegalstateexception


【解决方案1】:

试试

mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener () {
    @Override
    public void onCompletion(MediaPlayer mp) {
        mp.start();
        mp.pause();
        controller.show(0);
    }
});

【讨论】:

  • 为什么要解决问题?
  • 同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多