我使用MediaPlayer
播放一些录制的音频,SeekBar
显示播放的进度。我的问题是:当我点击SeekBar
跳转到时间位置时,会发生以下示例,当我想看到该进程时,我会看到日志:
getprogress(ms):10000
getprogress(ms):9956
getprogress(ms):10000
所以我跳到录制的音频的第10秒。 MediaPlayer
跳到第10秒,但在它跳过后,你可以看到。
我尽我所能。我试过播放其他录音机的音频文件,但发生了同样的事情。尝试使用比特率和采样率,但发生了同样的事情。
我希望有人知道解决这个问题的方法。谢谢。
修改
代码:
搜索栏:
progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver);
// handler2.removeCallbacks(updateTimeTask);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if (PlayerForegroundService.player != null) {
// handler2.removeCallbacks(updateTimeTask);
PlayerForegroundService.player.seekTo(seekBar.getProgress());
// handler2.post(updateTimeTask);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter(Constants.ACTION.PLAYER_UPDATE_UI));
}
}
});
}
getProgess():
public int getProgress(){
if ( player != null) {
Log.i(Constants.DEFAULTS.LOG_TAG, ""+player.getCurrentPosition());
return player.getCurrentPosition();
}
else
return 0;
}
调用getProgress时的代码:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, final Intent intent) {
actPosition.setText(intent.getStringExtra("formattedtimeplay"));
progressBar.setProgress(PlayerForegroundService.player.getProgress());
if (intent.getBooleanExtra("pausedplay", false))
playButton.setImageResource(R.drawable.playfilled);
}
};
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter(Constants.ACTION.PLAYER_UPDATE_UI));
super.onCreate(savedInstanceState);
}
答案 0 :(得分:0)
我似乎解决了这个问题。之前,我曾经以秒为单位设置SeekBar
的最大值。但是我设置了以毫秒为单位的最大值和seekTo
的值(以毫秒为单位),它可以正常工作。