我的片段中有一个hadoop fs -ls ...
,用于显示正在播放的seekbar
曲目的进度。一切都按预期工作,直到我改变设备的方向。我保存我的片段实例并将其加载回来,所有其他视图都按原样重新填充,音乐保持正常播放,但是搜索栏正确到达最大值,就好像曲目到达了它#39; s最长持续时间。基于媒体播放器位置更新搜索栏的可运行程序也会在方向更改后继续运行,并且在运行中记录MediaPlayer
值表明它与currentPos
保持同步因为它应该,即使在方向改变之后......所以基本上,它继续向搜索栏提供正确的位置;在方向改变后,搜索栏不会更新。这让我想知道更改后seekbar实例是否保持不变。如果它没有保持相同的实例,我无法弄清楚为什么或如何解决它。
我的播放按钮的mMediaPlayer.getCurrentPosition()
方法调用以下内容来启动曲目并将onCLick
连接到它:
seekbar
这是在上面的方法中调用的private void startPlayer(String url){
try {
mMediaPlayer.setDataSource(url);
} catch (IOException e) {
e.printStackTrace();
}
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mMediaPlayer.start();
playerState = PlayerState.PLAYING;
setButtonsForPlayerState();
setSeekBarValues();
mHandler = new Handler();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (mMediaPlayer != null ) {
int currentPos = mMediaPlayer.getCurrentPosition();
Log.e(LOG_TAG, "Current pos is " + currentPos);
seekBar.setProgress(currentPos);
if (currentPos<10000){
seekBarStartTime.setText("0:0" + currentPos / 1000);
}else{
seekBarStartTime.setText("0:" + currentPos / 1000);
}
}
if (mMediaPlayer.isPlaying()){
mHandler.postDelayed(this, 50);
}
}
}
);
}
});
}
方法:
setSeekBarValues()
private void setSeekBarValues() {
seekBar.setMax(mMediaPlayer.getDuration());
seekBarFinishTime.setText("0:" + seekBar.getMax()/1000);
seekBar.setProgress(0);
}
和seekBarStartTime
只是TextViews,分别显示了曲目的当前位置和结束时间。
由于我的所有其他观点,流媒体音乐等似乎都在重新创建活动和片段时起作用,我不认为它是保存实例状态的问题,但是如果你想让我发布那些代码,请告诉我。
任何想法都表示赞赏。