我有一个seekBar以及一个简单的音乐播放应用程序的当前计时器和总时间textViews。当我暂停我的音乐时,getDuration和getCurrentPosition都返回0,这就是当前时间和总时间文本都变为0并且seekBar也重置为开头的原因。当我恢复时,一切都会回到原来的状态,就像没有问题一样。为什么getDuration和getCurrentPosition在暂停时返回0?有解决方法吗?
我试图通过设置可见性来创建一个jank解决方案并创建一组新的两个textViews和seekBar来保存时间和seekBar就在暂停之前暂时显示,但那些很笨拙而且有延迟所以我仍然看到重置项目一瞬间。我只用一个按钮处理播放和暂停。如果需要任何其他信息,请告诉我。下面是我的seekBar处理方法,这两种方法都在onCreate中调用:
/**
* SeekBar setup and handling
* TODO: Bug where seekBar sets to 0 when paused. Retains position when resumed.
*/
private void initializeSeekBar() {
seekBar = (SeekBar) findViewById(R.id.seekBar);
totalDuration = new TextView(this);
totalDuration = (TextView) findViewById(R.id.totalDuration);
currentDuration = new TextView(this);
currentDuration = (TextView) findViewById(R.id.currentDuration);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(final SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser && musicBound) {
// update current time on change
currentDuration.setText(convertedTime(progress * 1000));
// update seekBar
seekTo(progress * 1000);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
musicService.mutePlayer();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
musicService.unMutePlayer();
seekTo(getCurrentPosition());
}
});
// start seekBar updating thread
run();
}
/**
* Thread that updates seekBar as song plays
*/
@Override
public void run() {
updateMetadataDisplay();
if (musicBound) {
long totalTime = getDuration();
long currentTime = getCurrentPosition();
seekBar.setMax(getDuration() / 1000);
seekBar.setProgress(getCurrentPosition() / 1000);
// timers
totalDuration.setText(convertedTime(totalTime));
currentDuration.setText(convertedTime(currentTime));
}
handler.postDelayed(this, 1000);
}
答案 0 :(得分:0)
我认为这是一个系统错误。我只是通过在getCurrentPosition()输出0时不更新seekBar来做一个解决方法。
run()中的示例:
if (musicBound) {
long totalTime = getDuration();
long currentTime = getCurrentPosition();
if(currentTime == 0)
return;
seekBar.setMax(totalTime / 1000);
seekBar.setProgress(currentTime / 1000);
// timers
totalDuration.setText(convertedTime(totalTime));
currentDuration.setText(convertedTime(currentTime));
}