我正在制作一种音频播放器。目前我有一个在 Activity 本身中运行的MediaPlayer (我知道这很糟糕)。屏幕上有一个SeekBar ,它会随着音乐播放而更新,如下所示:
private Runnable mUpdateTimeTask = new Runnable() {
public void run()
{
long totalDuration = mp.getDuration();
long currentDuration = mp.getCurrentPosition();
songTotalDurationLabel.setText("" + utils.millisecondsToTimer(totalDuration));
songCurrentDurationLabel.setText("" + utils.millisecondsToTimer(currentDuration));
int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration));
songProgressBar.setProgress(progress);
if(mp.isPlaying())
mHandler.postDelayed(this, 100);
else
mHandler.removeCallbacks(mUpdateTimeTask);
}
};
一旦用户按下后退按钮或从最近的应用程序列表中删除它,音乐就会停止。现在我希望音乐在后台运行,所以环顾互联网,我发现在ServicestartService()
中运行它,并从 Activity调用。此外,我在播放音乐时会出现通知,并在暂停时将其删除。
我从一项服务中了解到,即使应用程序关闭,我也会播放音乐。但我不明白的是,如果用户在服务正在运行的情况下点击通知,则活动将在 SeekBar 处重新启动progress = 0
。
Activity 重新启动后,如何让 UI 将 SeekBar 更新为 Service 的正确值?