在播放 Media Player 时更新 Android seebar 时音频中断
Audio interrupted when updating Android seebar while playing Media Player
我正在开发一个应用程序,可以播放 原始音乐文件 中的音乐,并且在 media player
播放时每秒更新一次搜索栏。但是,每次通过 Runnable 更新搜索栏时,这都会 中断 音频。我已尝试使用 Sound Pool(来自 here)或创建其他帖子建议的新线程,但问题仍然存在。我应该改用服务吗?
以下代码片段 运行 来自 ListFragment。谢谢
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
updateProgress = false;
}
});
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setProgress(0);
updateProgress = true;
updateRunnableHandler = new Handler();
mUpdateRunnable = new Runnable() {
@Override
public void run() {
if (updateProgress) {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
updateRunnableHandler.postDelayed(mUpdateRunnable, 1000);
}
}
};
updateRunnableHandler.postDelayed(mUpdateRunnable, 1000);
mediaPlayer.start();
发现问题。代码需要检查seekbar的setOnSeekBarChangeListener处理的onProgressChanged事件是否来自用户。
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
musicService.setPosition(progress);
}
}
我正在开发一个应用程序,可以播放 原始音乐文件 中的音乐,并且在 media player
播放时每秒更新一次搜索栏。但是,每次通过 Runnable 更新搜索栏时,这都会 中断 音频。我已尝试使用 Sound Pool(来自 here)或创建其他帖子建议的新线程,但问题仍然存在。我应该改用服务吗?
以下代码片段 运行 来自 ListFragment。谢谢
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
updateProgress = false;
}
});
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setProgress(0);
updateProgress = true;
updateRunnableHandler = new Handler();
mUpdateRunnable = new Runnable() {
@Override
public void run() {
if (updateProgress) {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
updateRunnableHandler.postDelayed(mUpdateRunnable, 1000);
}
}
};
updateRunnableHandler.postDelayed(mUpdateRunnable, 1000);
mediaPlayer.start();
发现问题。代码需要检查seekbar的setOnSeekBarChangeListener处理的onProgressChanged事件是否来自用户。
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
musicService.setPosition(progress);
}
}