Ich benutze MediaPlayer
, um einige aufgenommene Audio und SeekBar
zu spielen, um den Fortschritt des Spiels zu zeigen. Mein Problem ist: wenn ich auf der SeekBar
klicken, um eine Zeitposition zu springen, das folgende Beispiel passiert, und ich sehe auf dem Log, wenn ich die progess sehen wollen:MediaPlayer getProgess - falsche Werte
getProgress (ms): 10000
getProgress (ms): 9956
getProgress (ms): 10000
So springe ich auf den 10. Sekunde der Audioaufzeichnung. Die MediaPlayer
springt auf die 10. Sekunde aber nach springt sie ein bisschen zurück wie man sieht.
Ich habe alles versucht, was ich konnte. Ich habe versucht, andere Recorder-Audio-Dateien zu spielen, aber passierte das gleiche. Versucht, mit der Bitrate und Sampling-Rate zu spielen, aber das gleiche passiert.
Ich hoffe, jemand kennt die Lösung dafür. Danke.
Edit:
Code:
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;
}
Der Code, wenn getProgress aufgerufen wird:
@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);
}
posten Sie bitte Ihren Code. –
Wo protokollieren Sie diesen Fortschritt? Ich denke, um einen genauen Wert zu erhalten, sollten Sie es auf SeeseekComplete() eines onSeekCompleteListener überprüfen ... – Opiatefuchs
wo ist Ihr 'MediaPlayer.OnSeekCompleteListener'? – pskink