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
这是我创建我的媒体播放器并设置它的源的方法,但是在我调用 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