Android MediaPlayer GetProges-值不正确
我正在使用Android MediaPlayer GetProges-值不正确,android,audio,Android,Audio,我正在使用MediaPlayer播放一些录制的音频,SeekBar显示播放进度。我的问题是:当我点击SeekBar跳转到某个时间位置时,会出现以下示例,我想查看进度时会在日志上看到: getprogress(毫秒):10000 getprogress(ms):9956 获取进度(毫秒):10000 所以我跳到录音的第10秒。MediaPlayer跳到第10秒,但正如您所看到的那样,之后它会向后跳一点 我尽力了。我试着播放其他录音机的音频文件,但发生了同样的事情。尝试使用比特率和采样率,但结果相同
MediaPlayer
播放一些录制的音频,SeekBar
显示播放进度。我的问题是:当我点击SeekBar
跳转到某个时间位置时,会出现以下示例,我想查看进度时会在日志上看到:
getprogress(毫秒):10000getprogress(ms):9956
获取进度(毫秒):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));
}
}
});
}
getProges():
调用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);
}
看来我解决了这个问题。以前,我习惯于以秒为单位设置
SeekBar
的最大值。但是,在我设置了以毫秒为单位的最大值和以毫秒为单位的seekTo
值之后,它就可以正常工作了。请发布您的代码。您将此进度记录在哪里?我认为要获得准确的值,您应该在onSeekCompleteListener的onSeekComplete()中检查它…您的MediaPlayer在哪里。onSeekCompleteListener
?应用程序没有onSeekCompleteListener
,因此添加该侦听器
@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);
}