Я использую MediaPlayer
для воспроизведения некоторых записанных аудио и SeekBar
, чтобы показать ход игры. Моя проблема: когда я нажимаю на SeekBar
, чтобы перейти к позиции времени в следующем примере происходит, и я вижу на журнале, когда я хочу видеть ход процесса:MediaPlayer getProgess - неправильные значения
getprogress (мс): 10000
getprogress (мс): 9956
getprogress (мс): 10000
Так что переход на 10-й секунду записанного звука в. MediaPlayer
переходит на 10-ю секунду, но после того, как он отскакивает назад, как вы можете видеть.
Я пробовал все, что мог. Я попытался воспроизвести звуковые файлы другого рекордера, но произошло то же самое. Пробовал играть с битрейтом и частотой дискретизации, но так же.
Я надеюсь, что кто-то знает решение этого. Спасибо.
Edit:
Код:
SeekBar:
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);
}
, пожалуйста, отправьте свой код. –
где вы регистрируете этот прогресс? Я думаю, чтобы получить точное значение, вы должны проверить его на onSeekComplete() onSeekCompleteListener ... – Opiatefuchs
где ваш 'MediaPlayer.OnSeekCompleteListener'? – pskink