java - 在 Android 中播放音频时出现故障
问题描述
我正在使用MediaPlayer在 Android 中播放音频。MediaPlayer
工作正常,但是当我使用随音频持续时间更新的SeekBar时,音频播放不流畅并在播放时中断。下面是我的代码片段供参考。
mSongSeekBar.setMax(mMediaPlayer.getDuration());
mSongSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mMediaPlayer.seekTo(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
mSongSeekBar.setProgress(mMediaPlayer.getCurrentPosition());
}
}, 0, 500);
这种行为的原因是什么?如何摆脱这个?我应该选择Timer的任何替代品吗?
解决方案
我遇到了同样的问题,音频不断自行搜索并导致故障。您需要确保仅在用户擦洗音频时才搜索音频,而不是在正常运行时搜索音频。为此,onProgressChanged 的布尔 fromUser 参数很有用。这将确保仅在用户擦洗音频时才搜索音频。
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(fromUser){
mMediaPlayer.seekTo(progress);
}
}
推荐阅读
- javascript - 在 jQuery 中创建动态输入
- python - 如何在 python 中加载带有缓冲区的文件?
- azure-data-explorer - 如何在 KUSTO 上添加百分比符号
- c# - .net 核心和角度启用 ssr
- snakemake - 以通配符特定的方式使用snakemake的本地规则
- javascript - 在 Javascript 数组中找不到对象属性
- java - 使用 BinarySearch 查找元素的第一次和最后一次出现
- node.js - 使用 typeorm 在 oracle 过程中绑定 In 和 Out 参数
- java - java ssh 连接被拒绝
- aws-lambda - AWS Eventbridge 拒绝 cron