SeekTo 最初在 Android 的 Mediaplayer 中使 mediaplayer 无法工作

SeekTo initially in Android's Mediaplayer makes mediaplayer not work

这是我创建我的媒体播放器并设置它的源的方法,但是在我调用 seekTo 之后它就不再播放了(如果我给它一些时间 - 取决于音频,它会起作用 --> 结论调试后)。

public void makeAudio(boolean isInit){
    try{
        if(!isInit){
            mediaPlayer = new MediaPlayer();
        }
        soundSource = episode.getAudio();
        mediaPlayer.setDataSource(soundSource);
        mediaPlayer.prepareAsync();


        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                soundLength = mediaPlayer.getDuration();
                seekBar.setMax(soundLength/1000);
               mediaPlayer.seekTo(progress);//the problem I guess
            }
        });

    }catch (Exception e){
        e.printStackTrace();
    }
}

它向我显示此错误消息:

E/MediaPlayerNative: Attempt to perform seekTo in wrong state: mPlayer=0x706c23ebc0, mCurrentState=0

我想对此提出任何建议,因为我想让我的媒体播放器达到进度值(我从我的意图中得到它)。

我建议你使用 ExoPlayer,它是 MediaPlayer 的改进版本,addListener 更适合在线音频。

你必须添加监听器直到它准备好,然后你才能得到持续时间:

exoPlayer.addListener(new Player.Listener() {
                @Override
                public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
                    if (playbackState == ExoPlayer.STATE_READY) {
                        long realDurationMillis = exoPlayer.getDuration();
                        seekBar.setMax((int)realDurationMillis/1000);
                        dialog.dismiss();
                    }

                    if (playbackState == ExoPlayer.STATE_ENDED){
                        performEndExoPlayer();
                    }
                }
            });

这里有一个例子你可以看看https://developer.android.com/codelabs/exoplayer-intro#5